dfs-1 全排列

孤街醉人 提交于 2020-03-07 09:32:57

一个超简单的全排列问题

最近开始学习了一点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循环还没有结束,所以还会在进行循环,这样就会导致每次排数的顺序不同,就是这么简单,但我居然没能很快的反应过来,真是太辣鸡了!!!!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!