POJ 3126 Prime Path(BFS)
单步调试。。。各种调,1Y。
1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 int prim[10000],o[10000]; 5 int p[100000]; 6 int main() 7 { 8 int i,j,k,n,m,z,t,start,end,num; 9 int c1,c2,c3,c4; 10 for(i = 1001;i <= 9999;i ++) 11 { 12 z = 1; 13 for(j = 2;j <= sqrt(i);j ++) 14 { 15 if(i%j == 0) 16 { 17 z = 0; 18 break; 19 } 20 } 21 if(z) prim[i] = 1; 22 } 23 /* for(i = 1001;i<= 9999;i ++) 24 if(prim[i]) 25 printf("%d ",i);*/ 26 scanf("%d",&t); 27 while(t--) 28 { 29 num = 0;z = 0; 30 memset(o,0,sizeof(o)); 31 scanf("%d%d",&n,&m); 32 start = end = 1; 33 p[1] = n;o[n] = 1; 34 while(start <= end) 35 { 36 j = 1; 37 if(o[m]) 38 { 39 z = 1; 40 break; 41 } 42 for(i = start;i <= end;i ++) 43 { 44 c1 = p[i] % 1000; 45 c2 = p[i]-c1/100*100; 46 c4 = p[i] - (p[i] % 10); 47 c3 = p[i]/100*100 + (p[i]%10); 48 for(k = 1;k <= 9;k ++) 49 { 50 if(prim[c1+k*1000]&&!o[c1+k*1000]) 51 { 52 o[c1+k*1000] = 1; 53 p[end+j] = c1+k*1000; 54 j ++; 55 } 56 } 57 for(k = 0;k <= 9;k ++) 58 { 59 if(prim[c2+k*100]&&!o[c2+k*100]) 60 { 61 o[c2+k*100] = 1; 62 p[end+j] = c2+k*100; 63 j ++; 64 } 65 } 66 for(k = 0;k <= 9;k ++) 67 { 68 if(prim[c3+k*10]&&!o[c3+k*10]) 69 { 70 o[c3+k*10] = 1; 71 p[end+j] = c3+k*10; 72 j ++; 73 } 74 } 75 for(k = 0;k <= 9;k ++) 76 { 77 if(prim[c4+k]&&!o[c4+k]) 78 { 79 o[c4+k] = 1; 80 p[end+j] = c4+k; 81 j ++; 82 } 83 } 84 } 85 start = end +1; 86 end = end + j -1; 87 num ++; 88 } 89 if(z) 90 printf("%d\n",num); 91 else 92 printf("Impossible\n"); 93 } 94 return 0; 95 }