Codevs 1294 全排列(DFS)

来源:互联网 发布:软件开发有什么软件 编辑:程序博客网 时间:2024/05/18 01:26

1294 全排列

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
题目描述 Description

给出一个n, 请输出n的所有全排列

输入描述 Input Description

读入仅一个整数n   (1<=n<=10)

输出描述 Output Description

一共n!行,每行n个用空格隔开的数,表示n的一个全排列。并且按全排列的字典序输出。

样例输入 Sample Input

3

样例输出 Sample Output

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1

数据范围及提示 Data Size & Hint


/**Time: 2016/9/22Note:    全排列,啊哈算法里讲搜索的那一章第一个例题 **/#include<bits/stdc++.h>using namespace std;int  n;int  a[11];                 //存放排列的情况bool vis[11];               //记录数字是否使用过void DFS(int step){    if(step==n+1){          //如果搜到一个排列 输出然后返回到上一次调用DFS的地方        for(int i=1;i<=n;i++)            printf("%d ",a[i]);        printf("\n");        return ;    }    for(int i=1;i<=n;i++){        if(!vis[i]){        //如果这个数字没有用过,那就将这个数字加入,标记一下然后继续搜,           a[step]=i;              vis[i]=true;           DFS(step+1);           vis[i]=false;    //“回收”刚刚使用的数字        }    }}int main(){    while(scanf("%d",&n)!=EOF){        memset(vis,false,sizeof(vis));        DFS(1);    }    return 0;}


0 0
原创粉丝点击