poj 3126 Prime Path

 一道素数与BFS结合的题;

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

 

 

 

posted @ 2012-07-14 10:06  wutaoKeen  阅读(170)  评论(0编辑  收藏  举报