dfs-1 全排列

一个超简单的全排列问题

最近开始学习了一点dfs,做了一点水题.....
水题虽然是水题,但不做水题怎么做更难的题呢说的还挺有道理
然后呢,就写一哈我的一点心得体会

#include<bits/stdc++.h>
using namespace std;
int a[10],b[10]={0},n;
void dfs(int step){
	int i;
	if(step==n+1){
		for(i=1;i<=n;i++){
			printf("%d ",a[i]);
		}
		printf("\n");
		return;
	}
	for(i=1;i<=n;i++){
		if(b[i]==0){
			b[i]=1;
			a[step]=i;
			dfs(step+1);
			b[i]=0;
		}
	} 
	return;
} 
int main(){
	scanf("%d",&n);
	dfs(1);
	return 0; 
}

代码我也已经弄出来了,对大佬们来说弱智的一批,但对于我这种蒟蒻来说还是有一丢丢难度的,
怎么说呢,算法的思想我其实是能理解的,但在具体的实现过程中我搞不懂为什么第一次排列出1 2 3,之后第二次会出现1 3 2,之后等等一些排列不同的数,然后我就debug了一下,终于发现了问题所在,这个排列的数字之所以每次都不一样是由这个for循环中的i来控制的,dfs函数从上一级跳出来之后,可能有的for循环还没有结束,所以还会在进行循环,这样就会导致每次排数的顺序不同,就是这么简单,但我居然没能很快的反应过来,真是太辣鸡了!!!!

posted @ 2019-09-02 20:27  jljleo  阅读(146)  评论(0编辑  收藏  举报