深度优先(DFS)模板1:
void DFS(int k) //处理第k步
{ if (k==n) //已经处理到第n步,到达目的状态
输出结果
else //处理第k步
for (int i=1; i<=m; i++) //第k步中有m种可能
{ 处理第k步
DFS(k+1);//进入第k+1步
}
}
例1:多重排列问题
输出1-m个数中取n个数的所有多重排列。例如n=2,m=3的所有多重排列为:
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
//从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); return 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);
return 0;
}
深度优先DFS
时间: 2024-11-05 18:29:16