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
  1. 6
  2. 8
 
Sample Output
  1. Case 1:
  2. 1 4 3 2 5 6
  3. 1 6 5 2 3 4
  4. Case 2:
  5. 1 2 3 8 5 6 7 4
  6. 1 2 5 8 3 4 7 6
  7. 1 4 7 6 5 8 3 2
  8. 1 6 7 4 3 8 5 2

本题就是考递归搜索的能力。

数据不大。其它Prime, map等的优化都没多大作用的。

记得记录好数据,就不会有问题了。

只是HDU的推断系统的确垃圾,其它OJ都不会在意末尾多一个空格或者回车的问题的,HDU就一个空格一个回车都一定要依照她的格式。否则就presentation error.

  1. #include <stdio.h>
  2. const int MAX_N = 20;
  3. int num;
  4. int cycle[MAX_N];
  5. bool vis[MAX_N];
  6.  
  7. bool isPrime(int n)
  8. {
  9. for (int i = 2; i*i <= n; i++)
  10. if (n % i == 0) return false;
  11. return true;
  12. }
  13.  
  14. bool isLegal(int val, int i)
  15. {
  16. int left = i-1;
  17. if (!isPrime(val+cycle[left])) return false;
  18. if (i+1 == num && !isPrime(val+cycle[0])) return false;
  19. return true;
  20. }
  21.  
  22. void printNums(int i = 1)
  23. {
  24. if (i == num)
  25. {
  26. for (int j = 0; j+1 < num; j++)
  27. {
  28. printf("%d ", cycle[j]);
  29. }
  30. printf("%d\n", cycle[i-1]);
  31. return ;
  32. }
  33. for (int v = 2; v <= num; v++)
  34. {
  35. if (vis[v]) continue;
  36. if (isLegal(v, i))
  37. {
  38. cycle[i] = v;
  39. vis[v] = true;
  40. printNums(i+1);
  41. vis[v] = false;
  42. }
  43. }
  44. }
  45.  
  46. int main()
  47. {
  48. int t = 0;
  49. cycle[0] = 1;
  50. while (scanf("%d", &num) != EOF)
  51. {
  52. printf("Case %d:\n", ++t);
  53. for (int i = 2; i <= num; i++) vis[i] = false;
  54. printNums();
  55. putchar('\n');
  56. }
  57. return 0;
  58. }

HDU 1016 Prime Ring Problem 题解的更多相关文章

  1. HDOJ(HDU).1016 Prime Ring Problem (DFS)

    HDOJ(HDU).1016 Prime Ring Problem (DFS) [从零开始DFS(3)] 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架 ...

  2. [HDU 1016]--Prime Ring Problem(回溯)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 Prime Ring Problem Time Limit: 4000/2000 MS (Jav ...

  3. HDU 1016 Prime Ring Problem(素数环问题)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1016 Prime Ring Problem Time Limit: 4000/2000 MS (Jav ...

  4. HDU 1016 Prime Ring Problem(经典DFS+回溯)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  5. hdu 1016 Prime Ring Problem(DFS)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  6. hdu 1016 Prime Ring Problem(深度优先搜索)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  7. HDU 1016 Prime Ring Problem (DFS)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  8. HDU 1016 Prime Ring Problem (回溯法)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  9. Hdu 1016 Prime Ring Problem (素数环经典dfs)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

随机推荐

  1. springMVC框架搭建

    springMVC和struts一样为MVC框架,但是springMVC与spring做到无缝连接. 在搭建SpringMVC时可以在官网上下载最新的jar包. http://www.springso ...

  2. [置顶] ubuntu 和 win7 远程登陆 + vnc登陆

    ubuntu 和 win7 远程登陆: 第一种(通过win7自带的远程桌面来连接ubuntu) 1. windows7配置 我的电脑->属性->远程设置.-----允许远程连接 2. ub ...

  3. 使用RNSwipeViewController类库进行视图切换

    如今很多应用已经不再局限于点击按钮触发事件来进行视图之间切换,为迎合给予用户更好体验,体现iOS系统极佳用户体验,使用手势来进行各个视图之间切换,用户至于一个大拇指在屏幕中央就可浏览到很多信息: 关于 ...

  4. mysql dump 参数

    mysql dump 参数: -R, --routines Dump stored routines (functions and procedures). 备份 函数和存储过程: -E, --eve ...

  5. tc3162目录

    lsbin      dev      lib      proc     tmp      usrboaroot  etc      linuxrc  sbin     userfs   var# ...

  6. Main Memory Object-Relational Database Management System

    Main Memory Object-Relational Database Management System FastDBMain Memory Relational Database Manag ...

  7. [黑马程序员] 集合框架2——Map系 & 集合工具类(Collections、Arrays)

    ---------------------- ASP.Net+Android+IO开发..Net培训.期待与您交流! ---------------------- 0. 集合框架按其所实现的接口, 大 ...

  8. android中Logcat的深层理解

    Android的开发也能够归类为嵌入式设备的开发.即便不是嵌入式开发,依旧要注意对内存和处理的使用.养成一个好的习惯对自己的帮助是非常大的. 在Log的源代码中能够看到这种凝视: The order ...

  9. Delphi结构中使用String时遇到的内存泄露问题(没有利用String的引用计数自动销毁字符串的功能)

    先定义一个结构: TUserInfo = record  UserID: Integer; // 用户编号  UserName: string; // 用户名end; 然后编写如下代码: proced ...

  10. 14.4.5 Configuring InnoDB Change Buffering 配置InnoDB Change Buffering

    14.4.5 Configuring InnoDB Change Buffering 配置InnoDB Change Buffering 当INSERT,UPDATE,和删除操作在表上操作, 索引列的 ...