hdu1016-Prime 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 ; 

}


 

 

你可能感兴趣的:(Prim)