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

azhen 2003-10-18 07:33:45

【问题描述】

设计一个程序,使其将由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秒之内。超出该时间则认为程序错误。


...全文
242 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
buaaaladdin 2003-11-01
  • 打赏
  • 举报
回复
呵呵,楼主竟然是我室友。回头招呼他来结贴。

上面的程序太强了,pf,我用堆栈写出了一个,用了近200行,汗颜阿!学习!
zhouqingyuan 2003-10-31
  • 打赏
  • 举报
回复


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

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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