搜索算法

 







//从1到m中取n个数,允许重复取数 #include <iostream> using namespace std; int n,m, a[10]; void DFS(int k) { if (k==n) { for (int i=0; i<n; i++) cout<<a[i]<<" "; cout<<endl; } else for (int i=1; i<=m; i++) { a[k]=i; DFS(k+1); } } int main() { cin>>m>>n; DFS(0); }

  





//从1到m中取n个数,允许重复取数 #include <iostream> using namespace std; int n,m, a[10]; void DFS(int k) { if (k==n) { for (int i=0; i<n; i++) cout<<a[i]<<" "; cout<<endl; } else for (int i=1; i<=m; i++) { a[k]=i; DFS(k+1); } } int main() { cin>>m>>n; DFS(0); }

  

#include <iostream>
using namespace std;
int n,m, a[10];
void  DFS(int k)
{      if  (k==n) 
        {       for (int i=0; i<n; i++)     cout<<a[i]<<" ";
                cout<<endl;   
        }
        else 
                for (int i=1; i<=m; i++) 
				{  int ok=1;
				  for(int j=0;j<=k-1;j++)
				   if(a[j]==i)  ok=0 ;
					
				  
                  if(ok)   {a[k]=i;    DFS(k+1);} 
				}
}
int main()
{        cin>>m>>n;         DFS(0);          }





//从1到m中取n个数,不允许重复取数

#include <iostream>
using namespace std;
int n,m, a[10];  bool bz[10];
void  DFS(int k)
{   if  (k==n) 
    {   for (int i=0; i<n; i++)     cout<<a[i]<<" ";
        cout<<endl;   
    }
    else 
        for (int i=1; i<=m; i++)   
           if ( !bz[i] )
           {  a[k]=i;  bz[i]=true;  DFS(k+1); bz[i]=false;}
}
int main()
{        cin>>m>>n;         DFS(0);          }




//从1到m中取n个数,不允许重复取数,即排列方法2
#include <iostream>
using namespace std;
int n,m, a[10];
void  DFS(int k)
{   if  (k==n) 
    {   for (int i=0; i<n; i++)     cout<<a[i]<<" ";
        cout<<endl;   
    }
    else 
        for (int i=k; i<m; i++)   
        {    int t=a[k];a[k]=a[i];a[i]=t;
             DFS(k+1); 
             t=a[k];a[k]=a[i];a[i]=t;       }
}
int main()
{   cin>>m>>n;    
    for (int i=0; i<m; i++) a[i]=i+1;
    DFS(0);   return 0;    
}





//从1到m中取n个数,不允许重复取数,即排列方法2
#include <iostream>
using namespace std;
int n,m, a[10];
void  DFS(int k)
{   if  (k==n) 
    {   for (int i=0; i<n; i++)     cout<<a[i]<<" ";
        cout<<endl;   
    }
    else 
        for (int i=k; i<m; i++)   
        {    int t=a[k];a[k]=a[i];a[i]=t;
             DFS(k+1); 
             t=a[k];a[k]=a[i];a[i]=t;       }
}
int main()
{   cin>>m>>n;    
    
    DFS(0);       
}

  

原文地址:https://www.cnblogs.com/wc1903036673/p/3422458.html