HDU-1016 Prime Ring Problem DFS

  简单DFS,需要注意的是最后的那个数加上一要是个素数。

  代码如下:

#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
using namespace std;

int hash[25], rec[25], cnt;

bool isprime( int x )
{
	if( x<= 1 ) return false;
	if( x== 2 ) return true;
	int lim= sqrt( x );
	for( int i= 2; i<= lim; ++i )
	{
		if( x% i== 0 ) return false;
	}
	return true;
}

void DFS( int last, int cnt, int N )
{
	if( cnt== N )
	{
		if( isprime( rec[N- 1]+ 1 ) )
		{
			for( int i= 0; i< cnt; ++i )
			{
				printf( i== 0? "%d": " %d", rec[i] );
			}
			puts( "" );
		}
		return;
	}
	for( int i= 1; i<= N; ++i )
	{
		if( !hash[i]&& isprime( last+ i ) )
		{
			rec[cnt]= i;
			hash[i]= 1;
			DFS( i, cnt+ 1, N );
			hash[i]= 0;
		}
	}
}

int main()
{
	int N, ca= 0;
	while( scanf( "%d", &N )!= EOF )
	{
		rec[0]= 1;
		hash[1]= 1;
		printf( "Case %d:\n", ++ca );
		DFS( 1, 1, N );
		puts( "" );
	}
	return 0;
}
posted @ 2011-08-11 21:14  沐阳  阅读(192)  评论(0编辑  收藏  举报