标题:再来一个代码欣赏,多多指教
只看楼主
剑人
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2005-9-21
 问题点数:0 回复次数:3 
再来一个代码欣赏,多多指教

//输入一个正整数,比如6,输出
//1 4 3 2 5 6
//1 6 5 2 3 4
//可以形成一个环,相邻的数的和是质数
#include <cstdio>
#include <cmath>
bool B[33],fuck[17][17];
int ay[17]={16,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
void output(int *p,int i)
{
if(p[1]==1)
{
for(int j=1;j<=i;++j)
{
if(j!=1)
printf(" %d",p[j]);
else
printf("%d",p[1]);
}
printf("\n");
}
}
void swap(int &i,int &j){int t=i;i=j,j=t;}
void backtrack(int i,int n)
{
int j;
if(i>n)
{
if(fuck[ay[1]][ay[n]])
output(ay,n);
return;
}
for(j=i;j<=n;++j)
{
swap(ay[i],ay[j]);
if(fuck[ay[i-1]][ay[i]])
backtrack(i+1,n);
swap(ay[j],ay[i]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int i,j;
B[1]=false;
for(i=2;i<33;++i) B[i]=true;
for(i=2;i<=(int)sqrt((double)33);++i)
for(j=2;i*j<33;++j)
B[i*j]=false;
for(i=1;i<17;++i)
{ for(j=1;j<17;++j)
if(B[i+j]) fuck[i][j]=true;
else fuck[i][j]=false;
}
int flag=1,n;
while(scanf("%d",&n)!=EOF)
{
printf("Case %d:\n",flag++);
if(n==1)
{
printf("\n");
continue;
}
backtrack(1,n);
printf("\n");
}
return 0;
}

要是想输出更大数的质数环,方法一样

用深度搜索

^_^

搜索更多相关主题的帖子: 欣赏 指教 代码 
2006-03-31 18:33
corrupt
Rank: 2
等 级:新手上路
威 望:3
帖 子:535
专家分:0
注 册:2004-9-29
得分:0 
看你 经常 发 这个, 我建议你 自己搞个 帖子,把自己的代码都 copy 过去,

我们方便看,你以后也方便查找

2006-03-31 21:15
moming918
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-3-28
得分:0 
你的程序少了#include&lt;TCHAR.H&gt;吧

学习是不需要任何理由的!!!!!!
2006-03-31 22:35
剑人
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2005-9-21
得分:0 

不用那个头文件吧?

我在.net2005上写的。

程序是我在做学校acm题时做的,

觉得比较不错,就发了大家看看!

请多多指教呀

2006-04-01 09:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-54187-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.232402 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved