Prime Ring Problem
来源:互联网 发布:宁夏隆盛软件下载 编辑:程序博客网 时间:2024/06/06 09:59
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.
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.
Sample Input
6
8
Sample Output
Case 1:
1 4 3 2 5 6
1 6 5 2 3 4
Case 2:
1 2 3 8 5 6 7 4
1 2 5 8 3 4 7 6
1 4 7 6 5 8 3 2
1 6 7 4 3 8 5 2
Source
Asia 1996, Shanghai (Mainland China)
Difficulty:dfs 素数的判定;
DFS:初始状态:放了n个数
扩展方式:选一个没有选过的数且与上一个数的和是素数
目标状态:选了n个数,且第n个数和第一个数和是素数(因为首位相连)
#include <cstdio>#include <cstring>#include <algorithm>#include<cmath>using namespace std;int prime(int k){ if(k<=1) return 0; int m=floor(sqrt(k)+0.5); for(int i=2;i<=m;i++) if(k%i==0)return 0; return 1;}//素数的判断;int n;int a[100];int vis[100];void dfs(int num){ int i; if(num==n&&prime(a[num-1]+a[0]))//目标状态:选了n个数,且第n个数和第一个数和是素数(因为首位相连) { for(int i=0;i<n-1;i++) printf("%d ",a[i]); printf("%d\n",a[num-1]); } else { for(i=2;i<=n;i++) { if(vis[i]==0&&prime(i+a[num-1]))//扩展方式:选一个没有选过的数且与上一个数的和是素 {vis[i]=1; a[num++]=i; dfs(num); vis[i]=0; num--; } } } return;}int main(){int c=1; while(~scanf("%d",&n)) {printf("Case %d:\n",c); memset(vis,0,sizeof(vis[0])); a[0]=1; dfs(1);//初始状态:放了n个数初始状态:放了n个数; c++; printf("\n");} return 0;}
- 1016 Prime Ring Problem
- HDOJ1016-Prime Ring Problem
- HDU1016 Prime Ring Problem
- DFS__1195: Prime Ring Problem
- Prime Ring Problem
- 1016:Prime Ring Problem
- 1016 Prime Ring Problem
- HDUOJ1016 Prime Ring Problem
- 1016 Prime Ring Problem
- Prime Ring Problem
- hdu1016 Prime Ring Problem
- Prime Ring Problem(dfs)
- Prime Ring Problem
- Prime Ring Problem
- Prime ring problem
- hdu1016-Prime Ring Problem
- HDU1035 Prime Ring Problem
- 1016Prime Ring Problem
- tableView等滚动视图滚动时收缩上下导航栏与标签栏
- nyoj 12 喷水装置(二) 贪心 区间覆盖
- Activity
- js实现简单的图片切换
- 微软网站被黑了吗?
- Prime Ring Problem
- How to Calculate IP Header Checksum (With an Example)
- Andorid存储目录知识总结及文件操作方法封装
- 第八周 项目三 分数类中的运算符重载(1)
- python 各种模块学习
- Jquery-zTree的基本用法
- Nginx系列(二.nginx编译参数详解)
- send函数理解
- hadoop版的Hello,World