openjudge 4070 全排列 (dfs)

北战南征 提交于 2020-03-17 06:05:14

http://bailian.openjudge.cn/practice/4070
next_permutation();

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define ll long long

using namespace std;
int a[10];

int main()
{
    ios::sync_with_stdio(false);
    int n;
    while(cin >> n,n)
    {
        for(int i=0;i<n;i++)
            a[i]=i+1;
        do
        {
            for(int i=0;i<n;i++)
                printf("%d%c",a[i],i==n-1?'\n':' ');
        }while(next_permutation(a,a+n));
    }
    return 0;
}
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define ll long long

using namespace std;
int a[10],n,b[10],vis[10];

void dfs(int step)
{
    if(step>=n)
    {
        for(int i=0;i<n;i++)
            printf("%d%c",b[i],i==n-1?'\n':' ');
    }
    for(int i=0;i<n;i++)
    {
        if(vis[i]==0)
        {
            vis[i]=1;
            b[step]=a[i];
            dfs(step+1);
            vis[i]=0;
        }
    }
}
int main()
{
    ios::sync_with_stdio(false);
    while(cin >> n,n)
    {
        memset(vis,0,sizeof(vis));
        for(int i=0;i<n;i++)
            a[i]=i+1;
        dfs(0);
    }
    return 0;
}

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