您的位置:首页 > 其它

搜索------深度优先DFS-----模板1:例1 例2 例3 例4

2014-08-03 14:42 302 查看
[b]深度优先(DFS)模板1:[/b]

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

#include<iostream>
using namespace std;

int m,n,a[10];  //存放每个数
void  DFS(int k)
{   for (int i=0; i<k; i++)     cout<<a[i]<<" ";
cout<<endl;
int min = k>a[k-1]+1 ? k : a[k-1]+1;
for (int i=min; i<=m; i++)
{   a[k]=i;   DFS(k+1);     }
}
int main()
{   cin>>m;
for (int i=0; i<m; i++) a[i]=i+1;
DFS(0);   return 0;
}


View Code

#include<iostream>

using namespace std;

int m,n,a[10]; //存放每个数

void DFS(int k)

{

for (int i=0; i<k; i++) cout<<a[i]<<" "; cout<<endl;

int min = k>a[k-1]+1 ? k : a[k-1]+1;

for (int i=min; i<=m; i++)

{ a[k]=i; DFS(k+1); }

}

int main()

{

cin>>m;

for (int i=0; i<m; i++)

a[i]=i+1;

DFS(0);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: