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




  • 相关阅读:
    第三周作业
    #第四周作业
    第十二周作业
    第十一周作业
    第九周作业
    第八周作业
    2019第七周作业
    第三次实验报告及第五次课程总结
    第二次课程总结&学习总结
    第三周实验和学习总结
  • 原文地址:https://www.cnblogs.com/vivider/p/3697702.html
Copyright © 2011-2022 走看看