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;

}

 

 

 

你可能感兴趣的:(Path)