1. 程式人生 > >luogu【P1706】全排列問題

luogu【P1706】全排列問題

思路:最近發現自己對dfs的理解不夠深透於是寫了一個最基礎的dfs然後分析了一下QwQ

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int a[10001];
int n;
int v[10001];
int dfs (int m)//一定要注意這個引數代表的是遞迴的層數 
{
	if (m-1==n)//當遞迴層數足夠且產生滿足條件的解時輸出 
	{
		for (int i=1;i<=n;i++)
		  cout<<"      "<<a[i];
		cout<<endl;
		return 0;
	}
	for (int i=1;i<=n;i++)//列舉每個層數的可行節點 
	{
		if (v[i]==0)//如果尚未訪問則加入可行解 
		{
			a[m]=i;
			v[i]=1;
			dfs(m+1);
			v[i]=0;//回溯的過程 一層遞迴後將選過的節點重新加入 
		}
	}
}
int main ()
{
	cin>>n;
	dfs(1);
	return 0;
}