• 随便写写的搜索


    今天班上的女孩子问我两道搜索题,感觉自己好快,,,好久没这么自信过了 !!   

    第一题是这样的

    给定两个数n    m问把n拆成m个数相加

    输出方案数,只记得n,m都不大

    下面贴一下代码

     #include<iostream>
    using namespace std;
    int n,k;
    long r;
    void dfs(int a,int b,int n)
    {
         long m;
         if(a==k){
              r++;
              return ;
         }
         for(m=b;m<=n/2;m++)
         dfs(a+1,m,n-m);
    }
    int main()
    {
         while(cin>>n>>k){
             r=0;
           dfs(1,1,n);
           cout<<r<<endl;
         }
         return 0;
    }
    第二题好像有点意思,输入n,输入它的全排列

    比如输入3

    输出

    1 2 3

    1 3 2

    2 1 3

    2 3 1

    3 1 2

    3 2 1

    #include <bits/stdc++.h>
    bool vis[20];
    int a[20];
    int n;
    void dfs(int cur)
    {
        int i,j;
        if(cur==n+1){
            for(i=1;i<=n;i++){
               printf("%d",a[i]);
            }
            printf(" ");
        }
        else{
           for(i=1;i<=n;i++){
              if(!vis[i]){
                 a[cur]=i;
                 vis[i]=1;
                 dfs(cur+1);
                 vis[i]=0;
              }
           }
        }
    }
    int main()
    {
        while(scanf("%d",&n)!=EOF){
           dfs(1);
        }
        return 0;
    }
     

  • 相关阅读:
    linux命令学习之:cd
    SSH原理与运用
    java遍历当前会话所有Session
    spring+quartz报错:Table 'XXXX.QRTZ_TRIGGERS' doesn't exist
    python检测编码
    python安装模块
    python网络爬虫
    系统编码 python编码
    python 中文路径
    python读取文件乱码
  • 原文地址:https://www.cnblogs.com/ACWQYYY/p/4455379.html
Copyright © 2020-2023  润新知