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;
}


浙公网安备 33010602011771号