洛谷p1706全排列

刚刚学了深度优先搜索,找了道题试做了一下

先贴代码

#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; }

  

猜你喜欢

转载自www.cnblogs.com/heroliu/p/10352318.html