學dfs一年了,但是感覺還是不會,沒辦法,只有在學了,關鍵是我不能理解它的遞歸的思想,每次只要遞歸我就有點不太懂了,可能是自己太笨了吧,沒事,熟能生巧,既然不會,那我就在多刷幾道題就行了。
這個題的意思很簡單,大致意思就是給你一個n輸出1~n的全排列,直接dfs搜索就行了,
感覺也沒有啥好說的,直接給出代碼吧,並附上詳細的註釋。
#include<bits/stdc++.h>
using namespace std;
int a[103],b[103],n;//a數組用作輸出用,b數組用作標記,就是走過的點不在走
void print() //輸出函數.
{
for(int i=1;i<=n;i++)
printf("%5d",a[i]);
printf("\n");
}
void dfs(int k)
{
if(k==n) //遞歸終止的條件
{
print();
return;
}
for(int i=1;i<=n;i++)
{
if(!b[i])
{
b[i]=1;
a[k+1]=i;
dfs(k+1);
b[i]=0;//回溯的時候要把用過的點歸零.
}
}
}
int main()
{
cin>>n;
dfs(0);
return 0;
}