您的位置:首页 > 其它

dfs简单题目

2017-02-18 10:57 239 查看
1、桐桐的全排列(可在 http://acm.upc.edu.cn/problem.php?id=2355(中国石油acm网) 提交)

Description

今天,桐桐的老师布置了一道数学作业,要求列出所有从数字1到数字n的连续自然数的排列,要求所产生的任一数字

序列中不允许出现重复的数字。因为排列数很多,桐桐害怕写漏了,所以她决定用计算机编程来解决。

Input

只有一个整数n(1≤n≤9)。

Output

按字典序输出由1~n组成的所有不重复的数字序列,每行一个序列,每个数字之间有一个空格。

Sample Input

3

Sample Output

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1

第一次正式学习dfs,这个题很简单,主要需要掌握结束条件,与dfs中for循环的应用。

#include <stdio.h>
#include <string.h>

int a[1000], visit[1000], n;
int cunchu[10];

void dfs(int k)
{
if (k == n){                         //判断结束条件
for (int i = 0; i < k - 1; i++)
printf("%d ", cunchu[i]);
printf("%d\n", cunchu[k -1]);
return;
}
for (int i = 0; i < n; i++){
if (visit[i] == 0){
visit[i] = 1;               //标记是否被访问
cunchu[k] = a[i];           //存储数字
dfs(k + 1);                 //访问下一个数字
visit[i] = 0;               //回溯
}
}
return;
}

int main(void)
{
scanf("%d", &n);
for (int i = 0; i < n; i++){
a[i] = i + 1;              //赋值
}
dfs(0);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: