UVa 524 Prime Ring Problem(素数环)
2015-12-30 22:03
239 查看
题目链接:UVa 524
题意:
输入正整数n,把正整数1~n组成一个环,使得相邻两个整数之和均为素数。输出时从整数1开始逆时针排列。同一个环应恰好输出一次。n<=16.
分析:
简单BFS.
注意:
两测试案例之间有一行空格,输出数据之间有空格,行末无空格
CODE:
题意:
输入正整数n,把正整数1~n组成一个环,使得相邻两个整数之和均为素数。输出时从整数1开始逆时针排列。同一个环应恰好输出一次。n<=16.
分析:
简单BFS.
注意:
两测试案例之间有一行空格,输出数据之间有空格,行末无空格
CODE:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <algorithm> #include <queue> using namespace std; int prime[40] = { 0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1 }; int n, cases = 0, first = 1; struct Node { int a, cnt; int vis[20]; int num[20]; }cur,nextnode; void bfs() { queue<Node> q; memset(cur.vis, 0, sizeof(cur.vis)); memset(cur.num, 0, sizeof(cur.num)); cur.vis[1] = cur.a = cur.cnt = 1; cur.num[1] = 1; q.push(cur); while (!q.empty()) { cur = q.front(); q.pop(); for (int i = 2; i <= n; i++) { if (cur.vis[i] || !prime[cur.a + i]) continue; nextnode.a = i; nextnode.cnt = cur.cnt + 1; for (int j = 1; j <= n; j++) { nextnode.vis[j] = cur.vis[j]; nextnode.num[j] = cur.num[j]; } nextnode.vis[i] = 1; nextnode.num[nextnode.cnt] = i; if (nextnode.cnt == n && prime[nextnode.num + 1]) { cout << 1; for (int j = 2; j <= n; j++) cout << " "<< nextnode.num[j] ; putchar('\n'); } q.push(nextnode); } } } int main() { #ifdef LOCAL freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); #endif while (~scanf("%d",&n)) { if (first) first = 0; else printf("\n"); printf("Case %d:\n", ++cases); bfs(); } return 0; }
相关文章推荐
- Android逆向反编译之工具介绍
- java throw throws 区别(转载)
- log4j(二)将日志写入数据库
- Mahout In Action-第一章:初识Mahout
- 2015年总结和2016年的规划
- 摄像头驱动OV7725学习笔记连载(二):0V7725 SCCB时序的实现之寄存器配置
- Struts2的配置
- 我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。
- win 64位系统安装带有c编写的python模块出现ValueError: [u'path']解决
- 队列简单操作
- POJ 2115 C Looooops(扩展欧几里得应用)
- freemarker中参数及java片段的使用方法
- 155,纯代码创建标签和按钮,并关联点击事件
- Java读写Excel文件示例
- 如何知道浏览器所支持的属性和方法呢?
- 【数据结构】顺序栈的基本操作
- UVa 10976 Fractions Again?!(分数拆分)
- uva507
- java socket传送和接受byte[]
- 计算沙盒下文件夹内容大小 清空沙盒 文件 目录