zoukankan      html  css  js  c++  java
  • [练习] dfs输出全排列

    代码:

    #include <iostream>
    #include <string.h>
    using namespace std;
    int visit[11],num[11];
    int n;
    
    void dfs(int depth)
    {
        if(depth>n)//注意是大于号,不是大于等于,因为在等于的时候num[depth]还没有赋值
        {
            for(int j=1;j<=n;j++)
                cout<<num[j]<<" ";
            cout<<endl;
        }
        else
        {
            for(int i=1;i<=n;i++)
            {
                if(!visit[i])//前提该数没有被访问
                {
                    visit[i]=1;
                    num[depth]=i;
                    dfs(depth+1);
                    visit[i]=0;//返回原值,为新的排列做准备
                }
            }
        }
    }
    
    int main()
    {
    
        while(cin>>n)
        {
            memset(visit,0,sizeof(visit));
            dfs(1);
        }
    }
    


    另一种写法,只改动了dfs函数

    #include <iostream>
    #include <string.h>
    using namespace std;
    int visit[11],num[11];
    int n;
    
    void dfs(int depth)
    {
        for(int i=1;i<=n;i++)
        {
            if(!visit[i])
            {
                visit[i]=1;
                num[depth]=i;
                if(depth==n)
                {
                    for(int j=1;j<=n;j++)
                        cout<<num[j]<<" ";
                    cout<<endl;
                }
                else
                    dfs(depth+1);
                visit[i]=0;
            }
        }
    }
    
    int main()
    {
    
        while(cin>>n)
        {
            memset(visit,0,sizeof(visit));
            dfs(1);
        }
    }
    
    运行结果:




  • 相关阅读:
    wmq的A×B Problem
    MATLAB 求系统的单位冲击响应及单位阶跃响应
    关于共享率过低的一些事
    Vue组件之间的通信
    浏览器支持ES6的import和export
    Vue axios拦截问题
    开屏倒计时
    git常用操作
    原型
    this指向问题
  • 原文地址:https://www.cnblogs.com/sr1993/p/3697956.html
Copyright © 2011-2022 走看看