一个典型的例子就是输出1-n的全排列,这里也谢谢我们的启蒙书——《啊哈算法》。
很惭愧大一时候没有认真学习这个东西。
深度优先搜索的模型就是这样的:
void dfs(int step)
{
//判断边界
//尝试每一种可能,一般用for循环
//继续下一步 dfs(step+1);
//返回
下面贴一下自己写的代码:
给自己看而已啦~
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
const int maxn=1e3+10;
const int inf=0x3f3f3f3f;
int n;
int sta[maxn];
bool vis[maxn];
void dfs(int x)
{
if(x==n+1)//判断边界(当然顺便输出了)
{
for(int i=1;i<=n;i++)
printf("%d ",sta[i]);
printf("\n");
return ;
}
for(int i=1;i<=n;i++)//尝试每一种可能。这里需要有vis数组标记这个数是否用过。
{
if(!vis[i])
{
vis[i]=1;
sta[x]=i;
dfs(x+1);
vis[i]=!vis[i];//dfs返回之后,要回溯,回到原来的状态。
}
}
return;//这个就是经典的最后的返回了。
}
int main()
{
while(cin>>n)
{
memset(sta,0,sizeof(sta));
memset(vis,0,sizeof(vis));
dfs(1);
}
}