首页 > 代码库 > 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。