hdu1016Prime Ring Problem

http://acm.hdu.edu.cn/showproblem.php?pid=1016

#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std ;
int n ;
int union_prime( int x )
{
	for( int i = 2 ; i < x ; ++i )
		if( x % i == 0 )
			return 0 ;
	return 1 ;
}
int arr[ 30 ] , hash[ 30 ] ;
void dfs( int order , int index )
{
	arr[ order ] = index ;
	hash[ index ] = 1 ;
	if( order == n )
	{	
	//	printf( "1" ) ;
	 	if( union_prime( arr[ order ] + arr[ 1 ] ) )
		{
			printf( "1" ) ;
			for( int i = 2 ; i <= n ; ++i )
			{
				printf( " %d" , arr[ i ] ) ;
			}
			printf( "\n" ) ;
		}
			
	}
	for( int i = 1 ; i <= n ; ++i )
	{
		if( !hash[ i ] && union_prime( arr[ order ]+ i ) )
		{	
			dfs( order + 1 , i ) ;
			hash[ i ] = 0 ;
		}
	}
	return;
} 

int main()
{
	int flag = 0;
	while( cin >> n)
	{
		memset( hash , 0 , sizeof( hash ) ) ;
		printf( "Case %d:\n" , ++flag ) ; 
		if( !n )
			break ;
		dfs( 1 , 1 ) ;
		printf( "\n" ) ;	
	}
	return 0 ; 
}


原文地址:https://www.cnblogs.com/javawebsoa/p/3108989.html