全排列

这周刚接触到深广搜,被卡成孙子,不看别人代码,一个题都写不来,这应该是最水的一个题了吧,先从1开始搜,每搜索一个数后标记已搜索过,如果无法搜索就进行回溯。大概我现在只能理解到这,希望慢慢把深广搜干掉。
全排列
全排列

#include<iostream>
using namespace std;
int a[9],n;
bool vis[9];
void dfs(int step)
{
    if(step==n+1){
        for(int i=1;i<n+1;i++){
            if(i>1&&i!=n+1) cout<<" ";
            cout<<a[i];
        }
        cout<<endl;
    }
    for(int i=1;i<n+1;i++){
        if(vis[i]==0){
            a[step]=i;
            vis[i]=true;
            dfs(step+1);
            vis[i]=false;
        }
    }
}
int main()
{
    while(cin>>n){
        dfs(1);
    }
}