此题比较坑 原因是题目没说明 输出格式
//
// main.cpp
// uva 524 - Prime Ring Problem
//
// Created by XD on 15/7/26.
// Copyright (c) 2015年 XD. All rights reserved.
#include <iostream>
#include <string>
#include <queue>
#include <stack>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include<vector>
#include <string.h>
#include <string>
#include <algorithm>
#include <set>
#include <map>
#include <cstdio>
using namespace std ;
using namespace std ;
int prime[21][15] =
{
{0} ,
{7,2,4,6,10,12,16,18,21},
{7,1,3,5,9,11,15,17,21},
{6,2,4,8,10,14,16,21},
{6,1,3,7,9,13,15,19,21},
{5,2,6,8,12,14,18,21},
{5,1,5,7,11,13,17,21},
{4,4,6,10,12,16,21},
{4,3,5,9,11,15,21},
{4,2,4,8,10,14,21},
{4,1,3,7,9,13,19,21},
{3,2,6,8,12,18,21},
{3,1,5,7,11,17,19,21},
{2,4,6,10,16,18,21},
{2,3,5,9,15,17,21},
{2,2,4,8,14,16,21},
{2,1,3,7,13,15,21},
{1,2,6,12,14,21},
{1,1,5,11,13,19,21},
{0,4,10,12,18,21},
{0,3,7,9,11,21}
} ;
int visit[21] ;
int circle[21] ;
int n ;
void dfs(int i) ;
int main() {
int i = 1;
int flag = 0 ;
while (scanf("%d" ,&n) == 1) {
circle[1] = 1 ;
memset(visit, 0, sizeof(visit)) ;
visit[1] = 1 ;
if (flag) {
printf("\n") ;
}
flag = 1 ;
printf("Case %d:\n" ,i) ;
if (n > 1) {
dfs(1) ;
}
else
{
printf("1\n") ;
}
i++ ;
}
return 0;
}
void dfs(int i)
{
int j ;
if (i == n ) {
if (1 + circle[n] == 3 || 1 + circle[n] == 5 || 1 + circle[n] == 7 || 1 + circle[n] == 11 || 1 + circle[n] == 13 || 1 + circle[n] == 17 || 1 + circle[n] == 19||1 + circle[n] == 23||1 + circle[n] == 31||1 + circle[n] == 29||1 + circle[n] == 37)
{
for ( j = 1; j < n ; j++) {
printf("%d ",circle[j]) ;
}
printf("%d\n" ,circle[j]) ;
}
return ;
}
int t = prime[circle[i]][1] ;
for (j = 1; t <= n ; j++) {
if (visit[prime[circle[i]][j]] == 0) {
circle[i+1] = t ;
visit[t] = 1 ;
dfs(i+1) ;
visit[t] = 0 ;
}
t = prime[circle[i]][j+1] ;
}
}