首页 > 学院 > 开发设计 > 正文

UVA 524 素数环Prime Ring Problem (回溯法)

2019-11-10 22:01:22
字体:
来源:转载
供稿:网友

啃爹的输出格式!PE了好几次!

#include<cstdio>#include<cstring>#include<cmath>using namespace std;const int maxn=16;int vis[maxn],A[maxn]; int n;bool isp(int temp){                //判断是否为素数,是则返回true; 	int flag=1;	for(int i=2;i<=sqrt(temp);i++){		if(temp%i==0){			flag=0;break;		}	}	if(flag)return true;	else return false;}void dfs(int cur){	if(cur==n && isp(A[0]+A[n-1])){    		PRintf("%d",A[0]);		for(int i=1;i<n;i++)printf(" %d",A[i]);		printf("/n");	}	else for(int i=2;i<=n;i++){   //尝试放置每个数i; 		if(!vis[i] && isp(A[cur-1]+i)){ //如果i没有被使用过,并且与前一个数之和为素数 			A[cur]=i;			vis[i]=1;             //使用标志 			dfs(cur+1);			vis[i]=0;           //一定要改回 		}	}}int main(){	int count=0;	while(scanf("%d",&n)==1){		memset(vis,0,sizeof(vis));		A[0]=1;		if(count++)printf("/n");		printf("Case %d:/n",count);		dfs(1);	}	return 0;} 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表