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循环的应用。
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; }
相关文章推荐
- 杭电1045————DFS简单难度题目
- 题目1058 部分和问题 简单dfs
- hdu 题目1181 变形课 (简单DFS)
- 简单题目的dfs模版
- hdu 题目1241 Oil Deposits(简单DFS)
- 简单的加密题目(公钥私钥)
- 几个简单的C算法题目
- 简单的打印类题目,仅作为自己的记录.
- 百度笔试题2005题目大致是这样的: 第一部分选择题: 有几道网络相关的题目,巨简单,比如第一题是TCP、RIP、IP、FTP中哪个协议是传输层的......。有一道linux的 chown使用题目。其他的全是数据结构的题目!什么链,表
- PKU3051 Satellite Photographs 简单DFS
- 2007暑假简单题目二
- 微软面试中简单的算法题目(转)
- 微软面试中简单的算法题目
- 一道简单的面试题目:输入1234输出1_2_3_4
- 一道简单的acm题目
- 一道简单测试题目引发的感想!
- 2007暑假简单题目四
- 解析“一道考遍东北三省和青岛没有一人做出来的简单题目 ”
- 暑假简单题目一
- 一道简单而又容易出错的题目