专题一搜索 H - Prime Ring Problem


  1. 题目
    A ring is composed of n (even number) circles as shown in diagram.
    Put natural numbers 1, 2, . . . , n into each circle separately, and thesum of numbers in two adjacent circles should be a prime.
    Note: the number of first circle should always be 1.

    Input
    n (0 < n ≤ 16)
    Output
    The output format is shown as sample below. Each row represents a series of circle numbers in thering beginning from 1 clockwisely and anticlockwisely. The order of numbers must satisfy the aboverequirements.
    You are to write a program that completes above process.

    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
  2. 思路
    题目不难,对于每个数字,搜一下与它相加为质数的数就可以了,用dfs寻找每个分支,可以先预处理一次质数表(我没这么干),当然要是不嫌麻烦也可以直接预处理一次1到16的邻接表
    本题逆天的地方在于离谱的格式要求,相当严格,每行数字最后不能有多余空格,每组数据后面要空一行,最后一组数据后面还不能有回车,它题目里面还没提示,以至于很多交这题的同学未通过数达到了惊人的-8-9-10-11,最多的甚至有-14
  3. 代码
    #include
    #include
    #include
    #include
    #include
    using namespace std;
    int vis[18],n,ch[18];
    
    int prime(int n)
    {
    	for(int i=2;i<=sqrt(n);i++)
    	{
    		if(n%i==0)return 0;
    	}
    	return 1;
    }
    
    void dfs(int x)//x:环里现在有几个数
    {
    	if(x==n)
    	{
    		if(prime(ch[x]+1))
    		{
    			for(int i=1;i