首页 > 其他 > 详细

洛谷p1706全排列

时间:2019-02-04 22:48:51      阅读:232      评论:0      收藏:0      [点我收藏+]

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

先贴代码

#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全排列

原文:https://www.cnblogs.com/heroliu/p/10352318.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!