c语言素数环问题(回溯)
来源:互联网 发布:sql的in语句是什么意思 编辑:程序博客网 时间:2024/06/03 22:57
Problem F
素数环问题
时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
把1到20这重新排列,使得排列后的序列A满足:
a. 任意相邻两个数之和是素数
b. 不存在满足条件a的序列B使得:A和B的前k(0 <= k <= 19)项相同且B的第k+1项比A的第k+1项小。(即按字典序排列的第一项)
输入:
没有输入。
输出:
输出A,两个数字之间用一个空格隔开,第一个数字前面和最后一个数字后面没有空格。
输入样例:
输出样例:
#include<stdio.h>
#include<stdlib.h>
int a[21],sum=0;
int isprime(int m)
{
for(int i=2;i*i<=m;i++)
if(m%i==0) return 0;
return 1;
}
void output()
{ sum++;
if(sum==2)
{
for(int i=1;i<=20;i++)
if(i==1)printf("%d",a[i]);
else printf(" %d",a[i]);
printf("\n");
exit(0);
}
}
void swap(int m,int i)
{
int t;
t=a[m];
a[m]=a[i];
a[i]=t;
}
void search(int m)//2,3,4...20,21
{
if(m>20)
{
if(isprime(a[20]+a[1]))
output();
}
else
{ for(int i=m;i<=20;i++)//只能和后面的数交换,而不能和前面的数交换
{
swap(m,i);
if(isprime(a[m-1]+a[m]))
search(m+1);
swap(m,i);
}
}
}
int main()
{
for(int i=1;i<=20;i++)
a[i]=i;
search(2);
return 0;
}
- c语言素数环问题(回溯)
- C语言中的素数环问题(回溯)//函数exit的使用
- c语言三阶幻方问题(回溯)
- 素数环(回溯)
- 素数环(回溯)
- 回溯法-素数环问题
- 回溯法 素数环问题
- 判断素数问题(C语言实现)
- 判断素数问题(C语言)
- 判断素数问题(C语言实现)
- C语言(1)素数距离问题
- C语言(17)孪生素数问题
- C语言(20)素数求和问题
- 回溯经典之素数环问题
- 回溯法解决素数环问题
- 回溯法之素数环问题
- 回溯算法之素数环问题
- C语言 递归(回溯) 解决数独问题
- 【贪心】区间覆盖问题
- Linux正则表达式 awk
- Android resources.arsc文件与资源防护
- 新手程序员常犯的几个错误
- Eclipse上传代码到码云
- c语言素数环问题(回溯)
- Java Web自定义MVC框架详解
- 织梦表单提交提示修改
- Broadcast 分析 --- 之二
- stm32之IO操作(基于库函数)
- vector 避免内存频繁分配释放与手动释放vector内存
- noip2012国王游戏
- Commons CLI 入门
- C语言网 问题 1083: Hello, world!