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);
        }
    }
    
    运行结果:




  • 相关阅读:
    Python web前端 03 CSS属性
    Python web前端 02 CSS
    Python web前端 01 HTML常用标签
    docker unbuntu 32-bit 更新apt-get
    打包django项目
    pyautogui控制鼠标键盘自动填写数据
    django交互vue遇到的问题
    二维码
    tree-data
    推荐算法 pd
  • 原文地址:https://www.cnblogs.com/sr1993/p/3697956.html
Copyright © 2011-2022 走看看