dfs全排列

news/2024/7/20 20:57:34 标签: 深度优先, 蓝桥杯, 算法
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 20;
int arr[maxn]; //这n个数字有哪几个 如1 2 3 
int vis[maxn]; //判断这个数字是否被使用 
int n;//表示有n个数 比如有3个数字
int  stc[maxn];//保存排列的结果,这是个栈 
int top;//栈顶 
void init(){ //vis 初始化全为1,表示没被使用 
	for(int i = 0 ; i < maxn ; ++i){
		vis[i] = 1;
	}
}
void dfs(int ith){//ith表示找到当前一组排列的第几个数 

	if(ith == n){ //相等就表示找到 
	/*
	如果找到一组排列就返回,一组排列肯定为n个数字,
	ith与n个数相等时,表示找到一组排列 
	*/ 	
		//找到就输出
		for(int i = 0 ; i < n ; ++i){
			cout<<stc[i];
		} 
		cout<<endl;
		return;
	} 
	//如果没找到,就dfs+回溯
	for(int i = 0 ; i < n ; ++i){
		if(vis[i] == 1){ //表示没有使用 
			vis[i] = 0;//到了这个if就表示使用了,就置为0,表示使用过了 
			 //结果保存,栈增加让下一个栈空间继续保存 
			stc[top++] = arr[i];			
			dfs(ith+1);//找下一个数字 
//回溯状态,因为dfs已经开始找下一个状态,下一个状态中,这个vis肯定没有使用
//使用过的vis是当前状态的,不是下一状态,下一状态肯定为1
			top--;//还是因为回溯,这个栈空间在下一个状态肯定是没使用 
			vis[i] = 1; 
		}
		
	} 
	
	
}
int main(){
	while(cin >> n){
		for(int i = 0 ; i < n ; i++){
			cin >> arr[i];
		}
		top = 0;//初始时栈为空 
		init();
		dfs(0);//从0开始,说明ith长度为0,开始找排列 
		
	} 
	return 0;
}


http://www.niftyadmin.cn/n/1512192.html

相关文章

IIS7 里注册HttpModule和IIS6 里注册时候 在WEB.CONFIG里有所不同

The only weird part here is getting a handle to the logger. I’m using an IoC container in my application, however I can’t tell IIS how to build up my RequestDurationLoggerModule, so I’m stuck using the Service Locator pattern. The container could be a s…

c++和Java dfs迷宫问题

1.按照右下左上这个顺时针顺序走 2.全局变量中的迷宫是100*100&#xff0c;就已经把迷宫初始化全为0 3.迷宫要使用的大小是5*4&#xff0c;只有这块区域路和障碍物 如果迷宫直接定义大小5*4&#xff0c;没有把初始地图扩大&#xff0c;会导致数组越界 假设走到边界时&#xff0…

poj1015 Jury Compromise

dp 本题为special judge&#xff0c;不需要考虑多解情况。 f[i][j]表示在选m个人中的选i个人的时候使所有已选中的人的p,d差为j时&#xff0c;所能获得的p,d最大和。 f[i 1][j p[k] - d[k]] f[i][j] p[k] d[k];(要求k之前没有选过&#xff0c;要查看f[i][j]的完整路径&…

c++判断四个数字是否相等

bool xd(int a, int b, int c, int d) {bool flag true;int x[4];x[0] a;x[1] b;x[2] c;x[3] d;for (int i 1; i <4; i) {for (int j 0; j < i; j) {if (x[i] x[j]) {flag false;break;}}}return flag; }

浅谈vertical-align

不知道大家对vertical-align是否碰到了麻烦&#xff0c;今天对其做了一个系统的分析&#xff0c;主要有两篇文章向大家推荐&#xff0c;深入理解了这两篇文章&#xff0c;相信大家就能解决很多实际碰到的问题。具体能够解决什么问题&#xff0c;读透了&#xff0c;自然就知道了…

NDK r8e搭建cocos2d-x for android

IDE 官网下载 http://developer.android.com/sdk/index.html 该压缩包内已整合了Eclipse、ADT、SDK。下载完成后解压就可以. 运行解压出来的文件夹adt-bundle-windows-x86-20130219\eclipse下eclipse.ext.如下图&#xff1a; 其中按钮1是进入SDK Manager更新SDK用&#xff1a;…

c++素数环 不是规定1开头

整体思路就是普通的dfs&#xff0c;只是判断条件多了一个素数&#xff0c;如果出了问题&#xff0c;可以按照正常dfs修改&#xff0c;本人初学dfs&#xff0c;代码可能有问题 #include<iostream> using namespace std; const int N 999; int a[N];//保存结果 int vis[N…

JinlinOJ 通化邀请赛 E.GCD and LCM 最大公约数最小公倍数 关系

首先我先给出一个他们之间的关系 最大公约数L和最小公倍数G的关系&#xff1a; 1、L%G 0&#xff1b; 2、设A, B的最大公约数为G&#xff0c; 最小公倍数为L&#xff0c;则&#xff1a; L/G &#xff08;A/G&#xff09;*&#xff08;B/G&#xff09; 3、gcd(A/G, B/G) 1; 本…