ACM 66. [HAOI2004模拟] 数列问题(水dfs)
2014-08-17 08:56
302 查看
66. [HAOI2004模拟] 数列问题
★☆ 输入文件:dfs3.in输出文件:
dfs3.out简单对比
时间限制:1 s 内存限制:128 MB
问题描述
试编程将 1 至 N ( N ≤ 15 )的自然数序列 1 , 2 , … , N 重新排列,使任意相邻两数之和为素数。例如 N=3 时有两种排列方案 123 、 321 满足要求。
【输入格式】
输入文件:dfs3.in
第一行:一个整数n(1<=n<=15)
【输出格式】
输出文件:dfs3.out
输出若干行,每行为一种排列方案(排列方案按字典序排列, 相邻数字之间用空格分隔) ),最后一行输出排列方案总数。
【输入样例】
输入文件名:dfs3.in
3
输出文件名:dfs3.out
1 2 3
3 2 1
2
水dfs
#include <iostream> #include <cstdio> using namespace std; #define MAX_N 16 int n; int sel[MAX_N]; bool used[MAX_N]; int cnt=0; bool IsPrime(int n) { int i=2; while(i*i<=n) { if(n%i==0) return false; i++; } return true; } void dfs(int cur) { if(cur==n) { for(int i=0;i<n-1;i++) printf("%d ",sel[i]); printf("%d\n",sel[n-1]); cnt++; return; } for(int i=1;i<=n;i++) { if(!used[i] && IsPrime(sel[cur-1]+i)) { sel[cur]=i; used[i]=true; dfs(cur+1); used[i]=false; } } } int main() { freopen("dfs3.in","r",stdin); freopen("dfs3.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++) { sel[0]=i; used[i]=true; dfs(1); used[i]=false; } printf("%d\n",cnt); return 0; }
相关文章推荐
- COGS——C66. [HAOI2004模拟] 数列问题
- [HAOI2004模拟] 数列问题
- ACM之八数码问题----BFS搜索----数独游戏的模拟(上)
- ACM之八数码问题----BFS搜索----数独游戏的模拟(下)
- bzoj 1052: [HAOI2007]覆盖问题 (二分+dfs)
- ACM水题-Rescue LK(AC,迷宫问题,DFS求解)
- ACM: dfs题 poj 1321 (n皇后问题)
- Bzoj 4034: [HAOI2015]T2 树链剖分,子树问题,dfs序
- 模拟求解迷宫问题(DFS+BFS)
- [ACM_模拟] ZJUT OJ 1139 七龙珠 (追及类问题,s-t图像,模拟)
- ACM之八数码问题----BFS搜索----数独游戏的模拟(下)
- POJ 1129 Channel Allocation(dfs模拟图的上色问题)
- ACM 1116 四色问题(DFS)
- ACM之八数码问题----BFS搜索----数独游戏的模拟(中)
- ACM之八数码问题----BFS搜索----数独游戏的模拟(中)
- [ACM_模拟] HDU 1006 Tick and Tick [时钟间隔角度问题]
- [HAOI2004] 数列 - 树状数组
- BZOJ 1052 HAOI2007 覆盖问题 二分法答案+DFS
- [BZOJ1052][HAOI2007]覆盖问题(二分+dfs)
- ACM之八数码问题----BFS搜索----数独游戏的模拟(上)