• 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
  • 相关阅读:
    bzoj 1057: [ZJOI2007]棋盘制作
    【NOIP2012】开车旅行
    bzoj 2326: [HNOI2011]数学作业
    一本通1527欧拉回路
    一本通1530 Ant Trip
    一本通1528单词游戏
    luogu1856
    CF1045G
    10.18模拟赛
    10.16模拟赛
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3273084.html
Copyright © 2020-2023  润新知