poj 3126 Prime Path
2012-07-14 10:06
393 查看
一道素数与BFS结合的题;
View Code
View Code
View Code #include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<queue> #include<set> #include<map> #include<cstring> #include<vector> using namespace std; class que { public: int num; int step; }q[20000]; bool hash[10000]; void Prime( ) { int t = ( int )sqrt( 9999.0 ) + 1; memset( hash , 0 ,sizeof( hash ) ); for(int i = 2 ; i <= t ; i ++ ) { if( !hash[i] ) { for( int j = 2; i*j <= 9999 ; j ++ ) { hash[j*i] = true; } } } } int opt( int num , int n ) { // printf("%d\n",num ); return 0; } int BFS( int num1, int num2 ) { bool visit[10000]={0}; if( num1 == num2 ) return 0; int E=0,S=0; q[E].step = 0; q[E++].num = num1; while( E > S ) { // printf( "%d\n",q[S].num ); // getchar(); for( int i = 0 ; i < 4 ;i ++ ) { int sum = 1,t; for( int j = 0; j < i; j ++ ) { sum *= 10; } int t1 = q[S].num%sum; int t2 = (q[S].num/(sum*10)); t2 *=(sum*10) ; for( int j = 0 ; j <= 9 ; j ++ ) { t = sum*j; int num = t + t1 + t2; if( num >= 1000 && num <=9999 && !hash[num] && !visit[num] ) { if( num == num2 ) return q[S].step + 1; visit[num] = true; q[E].num = num; q[E++].step = q[S].step + 1; } } } S ++; } } int main( ) { Prime(); int n,num1,num2; while( scanf( "%d",&n )==1 ) { while( n-- ) { scanf( "%d %d",&num1,&num2 ); printf( "%d\n",BFS( num1 ,num2 ) ); } } //system( "pause" ); return 0; }
相关文章推荐
- poj 3126 Prime Path (bfs)
- POJ 3126 Prime Path(基础题)
- poj 3126 Prime Path (bfs)
- poj 3126 Prime path
- POJ 3126 Prime Path 第一道BFS 循环队列,AC的很辛苦!
- poj 3126 Prime Path([kuangbin带你飞]专题一 简单搜索)
- 个位数字poj - 3126 - Prime Path
- POJ - 3126 Prime Path (BFS)
- poj 3126 Prime Path
- POJ 3126 Prime Path (BFS)
- POJ 3126 Prime Path(素数打表+BFS)
- POJ 3126 Prime Path
- POJ 3126 Prime Path(BFS)
- POJ 3126 Prime Path(BFS)
- POJ 3126 Prime Path (BFS)
- poj 3126 Prime Path (bfs)
- POJ 3126 && HDU 1973 Prime Path(bfs)
- POJ 3126 Prime Path BFS搜索
- POJ-3126-Prime Path(BFS)
- poj 3126.Prime Path(bfs)