首页 > 代码库 > BFS/poj 3126 prime path

BFS/poj 3126 prime path

 1 #include<cstdio> 2 #include<queue> 3 #include<cstring> 4 #include<cmath> 5 using namespace std; 6 int n,x,y; 7 bool v[20000]; 8 struct point 9 {10     int x;11     int step;12 };13 14 int change(int x,int y,int z)15 {16     if (z==4) return (x/10)*10+y;17     else if (z==3)18     {19         int t=y*10+x%10;20         return (x/100)*100+t;21     }22     else if (z==2)23     {24         int t=y*100+x%100;25         return (x/1000)*1000+t;26     }27     else if (z==1)28     {29         return y*1000+(x%1000);30     }31 }32 33 bool prime(int x)34 {35     if (x==2 || x==3) return true;36     if (x<=1 || x%2==0) return false;37     for (int i=3;i<=sqrt(x);i++)38         if (x%i==0) return false;39     return true;40 }41 42 void bfs(int sx,int ex)43 {44     memset(v,0,sizeof(v));45     queue<point>que;46     point now,next;47     now.x=sx;48     now.step=0;49     v[sx]=1;50     que.push(now);51     while (!que.empty())52     {53         now=que.front();54         que.pop();55         if (now.x==ex)56         {57             printf("%d\n",now.step);58             return ;59         }60 61         for (int i=0;i<=9;i++)62             for (int j=1;j<=4;j++)63             {64                 if (i==0 && j==1) continue;65                 next.x=change(now.x,i,j);66                 if (prime(next.x) && !v[next.x])67                 {68                     v[next.x]=1;69                     next.step=now.step+1;70                     que.push(next);71                 }72             }73 74     }75     printf("Impossible\n");76 }77 int main()78 {79     scanf("%d",&n);80     for (int t=1;t<=n;t++)81     {82         scanf("%d%d",&x,&y);83         bfs(x,y);84     }85     return 0;86 }

 

BFS/poj 3126 prime path