现在的位置: 首页 > 综合 > 正文

hdu1016Prime Ring Problem

2013年12月04日 ⁄ 综合 ⁄ 共 633字 ⁄ 字号 评论关闭

深搜直接过掉。一开始Case:%d这样写的,WA了好几次,郁闷死啦。不过这题的测试数据应该是有点水。

代码吧:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;

#define MAX 40

int n;
int visited[MAX];
int arr[MAX];

int check(int x)
{
	for(int i = 2; i <= sqrt(x); i++)
	{
		if(x % i == 0)
			return 0;
	}
	return 1;
}

void DFS(int cur, int index)
{
	int i;
	arr[cur] = index;
	visited[index] = 1;
	if(cur == n)
	{
		if(check(arr[cur] + arr[1]))
		{
			printf("1");
			for(i = 2; i <= n; i++)
				printf(" %d", arr[i]);
			printf("\n");
		}
		return;
	}
	for(i = 2; i <= n; i++)
	{
		if(!visited[i] && check(arr[cur] + i))
		{
			DFS(cur + 1, i);
			visited[i] = 0; 
		}
	}
}

int main()
{
	int flag = 1;
	while(cin >> n)
	{
		printf("Case %d:\n", flag++);
		memset(visited, 0, sizeof(visited));
		DFS(1, 1);
		printf("\n");
	}
	return 0;
}

抱歉!评论已关闭.