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 }
posted @ 2012-07-15 19:55  Naix_x  阅读(225)  评论(0编辑  收藏  举报