八皇后问题变异编程(在线等待)

azhen 2003-10-18 07:43:01

数字环



【问题描述】

设计一个程序,使其将由1到N(N为偶数,且N <= 20)的N个正整数分别放置在由N个节点组成的环的各个节点上,其中1必须放在第一个节点上,并使任意两个相邻的节点上的数字之和为质数。

下图是当N为6时的一个例。当N为6时的输出样例如下:

1 4 3 2 5 6

1 6 5 2 3 4




【输入形式】

程序从标准输入上读入一个偶数。



【输出形式】

在标准输出上打印所有符合要求的排列方法。

输出有若干行,每一行都是符合题意的一种排列方法,所有数字从1所在位置开始,按顺时针方向依次输出,各个数字之间以空格分隔。

各行上的排列方式不重复。



注意:输出各行遵循“小数优先”原则, 在各种排列方式中,较小的数尽量靠前输出。如果将每行上的输出看成一个数字,则所有输出构成升序数列。具体格式见输出样例。



【样例输入】

8



【样例输出】

1 2 3 4 7 6 5 8

1 2 3 8 5 6 7 4

1 2 5 6 7 4 3 8

1 2 5 8 3 4 7 6

1 4 7 6 5 2 3 8

1 4 7 6 5 8 3 2

1 6 7 4 3 2 5 8

1 6 7 4 3 8 5 2



【样例说明】

输入整数8,要求将1、2、……、8排成环且相邻两数之和为素数。

合法的排列方法共有8种,由运行结果可见,第2位上可能的数字只有2、4和6。且先输出2开头的所有合法排列,再输出4开头的所有合法排列,最后输出6开头的所有合法排列,余下部分同样遵循此原则。



【运行时限】

要求每次运行时间限制在20秒之内。超出该时间则认为程序错误。

...全文
157 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
kbsoft 2003-10-18
  • 打赏
  • 举报
回复
#include <stdio.h>
int n;
int nLoop[21];
int beUsed[21];
int isPrime[40]={0,0,2,3,0,5,0,7,0,0,0,11,
0,13,0,0,0,17,0,19,0,0,
0,23,0,0,0,0,0,29,0,31,0,
0,0,0,0,37,0,0};

int testprime(int p)
{
return isPrime[p];
}

void search(int step)
{
int i;
if(step==n)
{
if(testprime(nLoop[0]+nLoop[n-1]))
{
for(i=0;i<n-1;i++)
printf("%d ",nLoop[i]);
printf("%d",nLoop[n-1]);
printf("\n");
}
return;
}
for(i=1;i<=n;i++)
{
if(!beUsed[i] && (testprime(i+nLoop[step-1]))){
beUsed[i]=1;
nLoop[step]=i;
search(step+1);
beUsed[i]=0;
}
}
}

int main()
{
int i=1;
while(scanf("%d",&n)!=EOF){
printf("Case %d:\n",i);
i++;
if(n%2==0){
beUsed[1]=1;
nLoop[0]=1;
search(1);
}
printf("\n");
}
return 0;
}
kbsoft 2003-10-18
  • 打赏
  • 举报
回复
easy
1.算法是程序的灵魂,优秀的程序在对海量数据处理时,依然保持高速计算,就需要高效的数据结构和算法支撑。2.网上数据结构和算法的课程不少,但存在两个问题:1)授课方式单一,大多是照着代码念一遍,数据结构和算法本身就比较难理解,对基础好的学员来说,还好一点,对基础不好的学生来说,基本上就是听天书了2)说是讲数据结构和算法,但大多是挂羊头卖狗肉,算法讲的很少。 本课程针对上述问题,有针对性的进行了升级 3)授课方式采用图解+算法游戏的方式,让课程生动有趣好理解 4)系统全面的讲解了数据结构和算法, 除常用数据结构和算法外,还包括程序员常用10大算法:二分查找算法(非递归)、分治算法、动态规划算法、KMP算法、贪心算法、普里姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法、马踏棋盘算法。可以解决面试遇到的最短路径、最小生成树、最小连通图、动态规划等问题及衍生出的面试题,让你秒杀其他面试小伙伴3.如果你不想永远都是代码工人,就需要花时间来研究下数据结构和算法。教程内容:本教程是使用Java来讲解数据结构和算法,考虑到数据结构和算法较难,授课采用图解加算法游戏的方式。内容包括: 稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、选择排序、插入排序、快速排序、归并排序、希尔排序、基数排序(桶排序)、堆排序、排序速度分析、二分查找、插值查找、斐波那契查找、散列、哈希表、二叉树、二叉树与数组转换、二叉排序树(BST)、AVL树、线索二叉树、赫夫曼树、赫夫曼编码、多路查找树(B树B+树和B*树)、图、图的DFS算法和BFS、程序员常用10大算法、二分查找算法(非递归)、分治算法、动态规划算法、KMP算法、贪心算法、普里姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法马踏棋盘算法。学习目标:通过学习,学员能掌握主流数据结构和算法的实现机制,开阔编程思路,提高优化程序的能力。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧