1. 程式人生 > >洛谷p1706全排列

洛谷p1706全排列

else {0} 大循環 未使用 stream 註意 空格 ios ==

剛剛學了深度優先搜索,找了道題試做了一下

先貼代碼

#include<iostream>
using namespace std;
int n;

int aa[100000];//數組開大一點,表示1———n,這幾個數
int book[1000010]={0};//用來標記1——n這幾個數是否被用過,避免重復
void dfs(int step){//這道題可以理解為像n個盒子裏填數,step表示站在第幾個盒子前
	if(step>n){//若當前的step比最後一個盒子還大,就說明n個盒子已經填完數了,下面用for循環依次輸出盒子裏的數
		for(int i=1;i<=n;i++){
			cout<<"    "<<aa[i];//註意空格加在數字前,建議直接復制這幾個空格
		}cout<<endl;//換行
return;//回到上一次調用函數的地方,這個return可有可無 }else{ for(int i=1;i<=n;i++){//現在站在第step個盒子前,開始把數字從1——n開始試 if(book[i]==0){//若數字i沒有被用過 aa[step]=i;//則把數字i放進第step個aa盒子裏 book[i]=1;//並標記這個數字已經用過 dfs(step+1);//站到下一個盒子面前.....遞歸 book[i]=0;//這裏記著把數字還原成未使用狀態,因為外層大循環還要使用 } } }return;//return結束掉dfs函數 } int main(){ cin>>n; dfs(1);從第一個盒子前開始... return 0; }

  

洛谷p1706全排列