hdu 素数环

在这里插入图片描述
全排列dfs的拓展

#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
int n, val[1010], hasht[1010];
bool isprime(int n)
{
	if (n <= 1) return false;
	int sqr = sqrt(n);
	for (int i = 2; i <= sqr; i++)
	{
		if (n % i == 0)
			return false;
	}
	return true;
}
void dfs(int a)
{
	if (a == n && isprime(val[0] + val[n - 1]))
	{
		for (int i = 0; i < n; i++)
			cout << val[i] << " ";
		cout << endl;
		return;
	}
	for (int i = 2; i <= n; i++)
	{
		if (!hasht[i])
		{
			if (isprime(i + val[a - 1]))
			{
				hasht[i] = true;
				val[a] = i;
				dfs(a + 1);
				hasht[i] = false;
			}
		}
	}
}
int main()
{
	int k = 0;
	while (cin>>n) {
		memset(val, 0, sizeof(val));
		memset(hasht, 0, sizeof(hasht));
		printf("Case %d:
", k++);
		val[0] = 1;
		dfs(1);
	}
	
}
原文地址:https://www.cnblogs.com/Hsiung123/p/13812023.html