例题7-4 素数环(Prime Ring Problem, UVa 524)
发布日期:2021-05-06 16:10:10 浏览次数:36 分类:精选文章

本文共 847 字,大约阅读时间需要 2 分钟。

原题链接:

分类:回溯法
备注:回溯法和生成-测试法的比较

备注是紫书上的,因为生成-测试法即纯枚举,是行不通的,作者对其进行了一下比较。

代码如下:

#include
#include
using namespace std;int ans[20] = { 1 }, vised[20], isp[40], n, kase;bool isPrime(int x) { if (x == 1)return false; int limit = x / 2 + 1; for (int i = 2; i < limit; i++) if (x % i == 0)return false; return true;}void dfs(int pos) { if (pos >= n) { for (int i = 0; i < n; i++) printf("%d%c", ans[i], i == n - 1 ? '\n' : ' '); return; } for (int i = 2; i <= n; i++) if (!vised[i]) { if (!isp[ans[pos - 1] + i])continue; if (pos == n - 1 && !isp[i + 1])continue; ans[pos] = i; vised[i] = 1; dfs(pos + 1); vised[i] = 0; }}int main(void) { for (int i = 0; i <= 40; i++) if (isPrime(i))isp[i] = 1; while (~scanf("%d", &n)) { if (kase)printf("\n"); printf("Case %d:\n", ++kase); dfs(1); } return 0;}
上一篇:HDU - 3117 Fibonacci Numbers
下一篇:习题6-9 纸牌游戏("Accordian"Patience, UVa 127)

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年03月22日 00时26分47秒