标签:深搜
Input
Output
Sample Input
6 8
Sample Output
Case 1: 1 4 3 2 5 6 1 6 5 2 3 4 Case 2: 1 2 3 8 5 6 7 4 1 2 5 8 3 4 7 6 1 4 7 6 5 8 3 2 1 6 7 4 3 8 5 2题意:就是给定一个数n,让你找出所有组成的圆圈,并且组成的圆圈相邻的两个数的和必须是质数,圆圈的首位是1,思路:每次从2开始搜索,并且用过的数标记掉AC代码:#include <iostream> #include <cstdio> #include<cmath> #include<algorithm> using namespace std; int n,sc=1; int a[21]; int visit[21]={0}; int ok(int x,int y){//判断质数 for(int i=2;i<=sqrt(x+y);++i){ if((x+y)%i==0){ return 0; } } return 1; } void dfs(int x){//x表示已经选的数的个数 if(x==n&&ok(a[x],1)){ printf("%d",a[1]); for(int j=2;j<=n;j++){ printf(" %d",a[j]); } printf("\n"); return; } for(int i=2;i<n+1;i++){ if(visit[i]==0&&ok(a[x],i)){ a[++x]=i; visit[i]=1; dfs(x); visit[i]=0; x--; } } } int main(){ while(~scanf("%d",&n)){ a[0]=0; a[1]=1; printf("Case %d:\n",sc++); dfs(1); printf("\n"); } return 0; }注意:在输入的时候!=EOF,求质数的过程中<=sqrt();这一题和HDU 1258 都用到了先把一些值储存再打印。。。做过那道这道就简单了。。。。。。。。。。fighting。。。
版权声明:本文为博主原创文章,未经博主允许不得转载。
HDU 1016 Prime Ring Problem 深搜
标签:深搜
原文地址:http://blog.csdn.net/qiuxueming_csdn/article/details/48135487