zoukankan      html  css  js  c++  java
  • 随便写写的搜索

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

    第一题是这样的

    给定两个数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;
    }
     

  • 相关阅读:
    一步一步写数据结构(线索二叉树)
    Android studio 下JNI编程实例并生成so库
    IOS和Android音频开发总结
    IDEA常用快捷键
    Spring事务简介
    IDEA新建Springboot项目
    140201126杨鹏飞作业六
    140201126杨鹏飞作业三
    140201126杨鹏飞作业七
    自我介绍
  • 原文地址:https://www.cnblogs.com/ACWQYYY/p/4455379.html
Copyright © 2011-2022 走看看