dfs 求全排列

来源:互联网 发布:js检验 编辑:程序博客网 时间:2024/05/18 11:49

dfs的典型递归,求全排列

#include <stdio.h>#include <string.h>#define maxn 50using namespace std;bool vis[10];int ans[maxn];int n;void dfs (int t){    int i, j;    for (int i = 1; i <= n ; i++){        if (vis[i] == 0){            vis[i] = 1;            ans[t] = i;            if (t < n - 1)                dfs(t + 1);            else {                printf("%d", ans[0]);                for (int j = 1; j < n; j++)                    printf(" %d", ans[j]);                printf("\n");            }            vis[i] = 0;            //注意这一句只有当填表完毕输出了结果后才有可能执行到            //填表完毕表示一个排列已经产生            //该数自然可以恢复自由身继续被访问了        }    }}int main(){    while (scanf("%d", &n)!=EOF){        memset(vis, 0, sizeof(vis));        dfs(0);    }}



0 0
原创粉丝点击