搜索------深度优先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
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;
}
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;
}
相关文章推荐
- DFS深度优先搜索模板
- 搜索------深度优先DFS-----模板2:例1 例2 例3 例4
- nyoj 部分和问题(深度优先搜索DFS)
- (算法)DFS深度优先搜索—2016年蓝桥杯省赛java剪邮票
- DFS--深度优先搜索--图的邻接矩阵
- 深度优先搜索 dfs Oil Deposits HDU - 1241
- 深度优先搜索遍历(DFS)——邻接表存储
- SDUT-3469 深度优先搜索练习之神奇的矩环(暴力/DFS)
- 算法之------深度优先搜索DFS和广度优先搜索BFS(最短路径)
- 深度优先搜索dfs(poj 1655)
- 图论(五)深度优先搜索DFS
- DFS深度优先搜索案例:马戏团叠罗汉
- 步步为营(十五)搜索(一)DFS 深度优先搜索
- leetcode 124. Binary Tree Maximum Path Sum 最大路径和 + DFS深度优先搜索
- nyoj 部分和问题(深度优先搜索DFS)
- dfs深度优先搜索 1~N 的排列理解dfs,抽象为n个数放n个盒子
- DFS--深度优先搜索--图的邻接矩阵
- 深度优先搜索DFS
- DFS深度优先搜索遍历
- 深度优先搜索DFS