DFS: 沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有节点都被访问为止。属于盲目搜索,最糟糕的情况算法时间复杂度为O(!n)。
#include <stdio.h>
#include <iostream>
using namespace std;
int a[101],b[101],n;
void print()
{
int i;
for(i=1;i<=n;i++)
{
cout<<a[i]<<' ';
}
cout<<endl;
}
inline void dfs(int i)
{
int j;
if(i==n+1)
{
print();
return;
}
for(j=1;j<=n;j++)
{
if(b[j]==0)
{
a[i]=j;
b[j]=1;
dfs(i+1);
b[j]=0;
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin>>n;
dfs(1);
return 0;
}