您的位置:首页 > 其它

搜索专题HDOJ1016输出环

2011-09-26 20:50 274 查看
#include<stdio.h>

#include<stdlib.h>

#include<math.h>

#include<iostream>

#include<string.h>

#define inf 0x3f3f3f

using namespace std;

int a[21],n;

bool vis[21],b[100];

void bfs(int t , int n)

{

for(int i = 2 ; i <= n ; i++)

{

if(t == n)

{

if(vis[i] == 0 && b[i+1] == 0 && b[i+a[t-1]] == 0)//这里注意,因为是形成环,所以最后一个还要

{ //考虑和第一个的组合

a[t] = i;

for(int i = 1 ; i <= n ; i++)

{

if(i != n)

printf("%d ",a[i]);

else

printf("%d\n",a[i]);

}

}

}

else

{

if(vis[i] == 0 && b[i+a[t-1]] == 0)

{

a[t] = i;

vis[i] = 1;

bfs(t+1,n);

vis[i] = 0;

}

}

}

}

int x;

int main()

{

memset(b,0,sizeof(b));

for(int i = 2 ; i <= 50 ; i++)

{

for(int j = 2 ; j < i ; j++)

{

if(i % j == 0)b[i] = 1;

}

}

x = 1;

while(scanf("%d",&n) != EOF)

{

printf("Case %d:\n",x);

x++;

memset(a,0,sizeof(a));

memset(vis,0,sizeof(vis));

vis[1] = 1;

a[1] = 1;

bfs(2,n);

printf("\n");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: