COGS——C66. [HAOI2004模拟] 数列问题
2017-07-16 10:34
183 查看
http://www.cogs.pro/cogs/problem/problem.php?pid=66
★☆ 输入文件:
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
#include <algorithm> #include <cstdio> using namespace std; int n,ans,a[55]; int prim[55],use[55]; void Prim() { for(int i=1;i<=(n<<1);i++) { prim[i]=1; for(int j=2;j*j<=i;j++) if(i%j==0) { prim[i]=0; break; } } } void DFS(int cnt) { if(cnt==n+1) { ans++; for(int i=1;i<=n;i++) printf("%d ",a[i]); printf("\n"); return ; } for(int i=1;i<=n;i++) { if(use[i]) continue; if(!prim[a[cnt-1]+i]&&cnt>1) continue; use[i]=1; a[cnt]=i; DFS(cnt+1); use[i]=0; } } int main() { freopen("dfs3.in","r",stdin); freopen("dfs3.out","w",stdout); scanf("%d",&n); Prim(); DFS(1); printf("%d",ans); return 0; }
相关文章推荐
- ACM 66. [HAOI2004模拟] 数列问题(水dfs)
- [HAOI2004模拟] 数列问题
- BSOJ2684 cogs 362 -- 【CEOI2004】锯木厂选址 随机化 模拟退火 神级骗分
- [HAOI2004] 数列 - 树状数组
- 模拟退火求函数最值问题求解
- 斐波那契数列及其变形问题(跳台阶,变态跳台阶,矩形覆盖)
- 基于WinXP sp2配置biztalk2004遇到的问题及解决
- [VB.NET]问一个键盘的模拟问题,如何做一个画面键盘来代替微软的软键盘,有点难度呀!!!
- 哈理工OJ 2004 整数划分(整数划分问题)
- 2018.1.25 T3 数列问题
- 两个栈模拟一个数列
- 关于使用VC模拟按键的问题
- ACM之八数码问题----BFS搜索----数独游戏的模拟(上)
- 实验4 编制模拟“五个哲学家”问题的程序
- 婚姻稳定性问题的模拟
- 【BZOJ 2431】 [HAOI2009] 逆序对数列 (DP)
- POJ 2886 线段树对约瑟夫问题的模拟
- 使用C++TR1实现物流配送问题的简单模拟
- java模拟实现生产者---消费者问题
- 【cogs240】数列操作【线段树】