hdu 1016 Prime Ring Problem dfs深搜算法
来源:互联网 发布:排山掌诀推算法 编辑:程序博客网 时间:2024/06/03 19:47
Prime Ring Problem
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 53778 Accepted Submission(s): 23783
Problem Description
A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into each circle separately, and the sum of numbers in two adjacent circles should be a prime.
Note: the number of first circle should always be 1.
Note: the number of first circle should always be 1.
Input
n (0 < n < 20).
Output
The output format is shown as sample below. Each row represents a series of circle numbers in the ring beginning from 1 clockwisely and anticlockwisely. The order of numbers must satisfy the above requirements. Print solutions in lexicographical order.
You are to write a program that completes above process.
Print a blank line after each case.
You are to write a program that completes above process.
Print a blank line after each case.
Sample Input
68
Sample Output
Case 1:1 4 3 2 5 61 6 5 2 3 4Case 2:1 2 3 8 5 6 7 41 2 5 8 3 4 7 61 4 7 6 5 8 3 21 6 7 4 3 8 5 2
Source
Asia 1996, Shanghai (Mainland China)
//hdu1016//#include"stdafx.h"#include<iostream>using namespace std;#define size 30bool flag = false;bool visit[size];int behind[size];int n;//判断是否为素数bool isPrime(int a) {for (int i = 2; i < a; i++) {if (a%i == 0)return false;}return true;}//判断是否所有点都访问过bool isend() {for (int i = 1; i <= n; i++) {if (visit[i]==false)return false;}return true;}//输出满足条件的路径void print() {int next = 1;cout << "1";while (true) {next = behind[next];if (next == 1)break;cout << " " << next;}cout << endl;}void dfs(int index) {//如果所有节点都已经访问过 并且最末尾的节点和最开始的节点之和也为素数if (isend()&&isPrime(1 + index)) {behind[index] = 1;flag = true;return;}for (int i = 1; i <= n; i++) {if (i == index)continue;if (!isPrime(i + index))continue;if (visit[i])//已经访问过则跳过continue;visit[i] = true;//置已访问标记behind[index] = i;//记录路径用于输出dfs(i);if (flag) {print();flag = false;}visit[i] = false;}}int main() {int cases = 0;while (cin >> n) {cases++;cout << "Case " << cases << ":" << endl;flag = false;memset(behind, 0, sizeof(behind));memset(visit, false, sizeof(visit));visit[1] = true;dfs(1);cout << endl;}}
阅读全文
0 0
- hdu 1016 Prime Ring Problem dfs深搜算法
- Prime Ring Problem hdu 1016 dfs
- Hdu-1016 Prime Ring Problem【DFS】
- HDU 1016(Prime Ring Problem)DFS
- hdu 1016 Prime Ring Problem dfs搜索
- hdu 1016 Prime Ring Problem (dfs)
- hdu 1016 Prime Ring Problem(DFS)
- HDU 1016 Prime Ring Problem【DFS】
- HDU 1016Prime Ring Problem简单dfs
- hdu 1016 Prime Ring Problem(DFS)
- HDU 1016 Prime Ring Problem (DFS)
- HDU 1016 Prime Ring Problem 简单DFS
- HDU 1016Prime Ring Problem(dfs)
- hdu 1016 Prime Ring Problem (dfs)
- hdu 1016 Prime Ring Problem dfs
- Hdu 1016 Prime Ring Problem DFS搜索
- HDU 1016 Prime Ring Problem(DFS)
- hdu 1016Prime Ring Problem dfs
- Python第二天课后作业
- 造成HashMap非线程安全的原因
- jdk 安装出错,java -version 或java 可以运行,但是javac不行
- 【三】、使用循迹传感器和超声波驱动二轮差分底盘
- android sdk manager获取更新版本问题
- hdu 1016 Prime Ring Problem dfs深搜算法
- 移动设备上“精灵图”的制作
- Metasploit进行渗透windows7
- 单片机学习概览
- 华为部门宣讲会后感及求职的一点体会
- datastage status code的含义
- 设计模式之单例模式(Singleton)
- gdb调试命令
- Java获取当前格式化日期