Prime Path

http://poj.org/problem?id=3126

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 using namespace std;
 5 
 6 struct node
 7 {
 8     int k,step;
 9 };
10 
11 node h[100000];
12 bool p[11000];
13 int x,y,tot,s[11000];
14 
15 void make(int n)
16 {
17     memset(p,0,sizeof(p));
18     p[0]=1;
19     p[1]=1;
20     for(int i=2; i<=n; i++) if(!p[i])
21             for(int j=i*i; j<=n; j+=i) p[j]=1;
22 }
23 
24 int change(int x,int i,int j)
25 {
26     if(i==1) return (x/10)*10+j;else
27     if(i==2) return (x/100)*100+x%10+j*10;else
28     if(i==3) return (x/1000)*1000+x%100+j*100;else
29     if(i==4) return (x%1000)+j*1000;
30 }
31 
32 int main()
33 {
34     make(9999);
35     cin>>tot;
36     while(tot--)
37     {
38         cin>>x>>y;
39         h[1].k=x;
40         h[1].step=0;
41         int l=1,r=1;
42         memset(s,100,sizeof(s));
43         int ans=-1;
44         while(1)
45         {
46             if(h[l].k==y)
47             {
48                 ans=h[l].step;
49                 break;
50             }
51             int tk,ts;
52             for(int i=1; i<=4; i++)
53             {
54                 for(int j=0; j<=9; j++)
55                 {
56                     if(!((j==0)&&(i==4)))
57                     {
58                         tk=change(h[l].k,i,j);
59                         if(p[tk]) continue;
60                         ts=h[l].step+1;
61                         if(ts>=s[tk]) continue;
62                         if(tk==y)
63                         {
64                             ans=ts;
65                             break;
66                         }
67                         s[tk]=ts;
68                         r++;
69                         h[r].k=tk;
70                         h[r].step=ts;
71                     }
72                 }
73 
74             }
75             if(l==r||ans>=0) break;
76             l++;
77 
78         }
79         if(ans>=0) cout<<ans<<endl;
80         else cout<<" Impossible"<<endl;
81 
82     }
83     return 0;
84 }
View Code
原文地址:https://www.cnblogs.com/fanminghui/p/3273084.html