zoukankan      html  css  js  c++  java
  • 素数判断BFS之“Prime Path”

    题目大意:

      给两个素数 a ,b ,在(1033 -- 8179)之间(左闭右闭)。询问将 a 变成 b 的最短步数。

      找不到输出  Impossible  。

      每次只能改变一个数字,千位数字不能出现 0 。而且每次一步改变后的数仍然为素数。

      样例:

          3

          1033 8179

          1373 8017

          1033 1033

          ————————

          6

          7

          0

      解释其中第一个样例:

          1033  -->  1733  -->  3733  -->  3739  -->  3779  -->  8779  -->  8179

      有一个点就是变换后的数字可以超出给定的范围(1033 -- 8179),但是也得是四位非零开头的素数。

      因为读题不细致,愣是WA了好几发。

    解题思路:

      和 Catch That Cow 差不多,用 vis[] 记录更新步数。每步都要判断素数。

      队列为零就说明找不到了。

      在判断素数这方面可以打个表。。。。。。

      也可以直接判断。

      注意千位数不能搜索 0 ,个位数可以剪掉 0,2,4,6,8 的分支。

      注意如果使用 Java 语言,这个素数表不要存 String 型,

      否则在用 compareTo 判断相等的时候时间复杂度过高,会超时。

    AC代码(骚气的素数表):

      1 import java.util.*;
      2 
      3 public class Main{
      4 
      5     static int list[] = {
      6              1009 ,1013 ,1019 ,1021 ,1031 ,1033 ,1039 ,1049 ,1051 ,1061 ,1063 ,1069 ,1087 ,1091 ,1093 ,
      7                 1097 ,1103 ,1109 ,1117 ,1123 ,1129 ,1151 ,1153 ,1163 ,1171 ,1181 ,1187 ,1193 ,1201 ,1213 ,
      8                 1217 ,1223 ,1229 ,1231 ,1237 ,1249 ,1259 ,1277 ,1279 ,1283 ,1289 ,1291 ,1297 ,1301 ,1303 ,
      9                 1307 ,1319 ,1321 ,1327 ,1361 ,1367 ,1373 ,1381 ,1399 ,1409 ,1423 ,1427 ,1429 ,1433 ,1439 ,
     10                 1447 ,1451 ,1453 ,1459 ,1471 ,1481 ,1483 ,1487 ,1489 ,1493 ,1499 ,1511 ,1523 ,1531 ,1543 ,
     11                 1549 ,1553 ,1559 ,1567 ,1571 ,1579 ,1583 ,1597 ,1601 ,1607 ,1609 ,1613 ,1619 ,1621 ,1627 ,
     12                 1637 ,1657 ,1663 ,1667 ,1669 ,1693 ,1697 ,1699 ,1709 ,1721 ,1723 ,1733 ,1741 ,1747 ,1753 ,
     13                 1759 ,1777 ,1783 ,1787 ,1789 ,1801 ,1811 ,1823 ,1831 ,1847 ,1861 ,1867 ,1871 ,1873 ,1877 ,
     14                 1879 ,1889 ,1901 ,1907 ,1913 ,1931 ,1933 ,1949 ,1951 ,1973 ,1979 ,1987 ,1993 ,1997 ,1999 ,
     15                 2003 ,2011 ,2017 ,2027 ,2029 ,2039 ,2053 ,2063 ,2069 ,2081 ,2083 ,2087 ,2089 ,2099 ,2111 ,
     16                 2113 ,2129 ,2131 ,2137 ,2141 ,2143 ,2153 ,2161 ,2179 ,2203 ,2207 ,2213 ,2221 ,2237 ,2239 ,
     17                 2243 ,2251 ,2267 ,2269 ,2273 ,2281 ,2287 ,2293 ,2297 ,2309 ,2311 ,2333 ,2339 ,2341 ,2347 ,
     18                 2351 ,2357 ,2371 ,2377 ,2381 ,2383 ,2389 ,2393 ,2399 ,2411 ,2417 ,2423 ,2437 ,2441 ,2447 ,
     19                 2459 ,2467 ,2473 ,2477 ,2503 ,2521 ,2531 ,2539 ,2543 ,2549 ,2551 ,2557 ,2579 ,2591 ,2593 ,
     20                 2609 ,2617 ,2621 ,2633 ,2647 ,2657 ,2659 ,2663 ,2671 ,2677 ,2683 ,2687 ,2689 ,2693 ,2699 ,
     21                 2707 ,2711 ,2713 ,2719 ,2729 ,2731 ,2741 ,2749 ,2753 ,2767 ,2777 ,2789 ,2791 ,2797 ,2801 ,
     22                 2803 ,2819 ,2833 ,2837 ,2843 ,2851 ,2857 ,2861 ,2879 ,2887 ,2897 ,2903 ,2909 ,2917 ,2927 ,
     23                 2939 ,2953 ,2957 ,2963 ,2969 ,2971 ,2999 ,3001 ,3011 ,3019 ,3023 ,3037 ,3041 ,3049 ,3061 ,
     24                 3067 ,3079 ,3083 ,3089 ,3109 ,3119 ,3121 ,3137 ,3163 ,3167 ,3169 ,3181 ,3187 ,3191 ,3203 ,
     25                 3209 ,3217 ,3221 ,3229 ,3251 ,3253 ,3257 ,3259 ,3271 ,3299 ,3301 ,3307 ,3313 ,3319 ,3323 ,
     26                 3329 ,3331 ,3343 ,3347 ,3359 ,3361 ,3371 ,3373 ,3389 ,3391 ,3407 ,3413 ,3433 ,3449 ,3457 ,
     27                 3461 ,3463 ,3467 ,3469 ,3491 ,3499 ,3511 ,3517 ,3527 ,3529 ,3533 ,3539 ,3541 ,3547 ,3557 ,
     28                 3559 ,3571 ,3581 ,3583 ,3593 ,3607 ,3613 ,3617 ,3623 ,3631 ,3637 ,3643 ,3659 ,3671 ,3673 ,
     29                 3677 ,3691 ,3697 ,3701 ,3709 ,3719 ,3727 ,3733 ,3739 ,3761 ,3767 ,3769 ,3779 ,3793 ,3797 ,
     30                 3803 ,3821 ,3823 ,3833 ,3847 ,3851 ,3853 ,3863 ,3877 ,3881 ,3889 ,3907 ,3911 ,3917 ,3919 ,
     31                 3923 ,3929 ,3931 ,3943 ,3947 ,3967 ,3989 ,4001 ,4003 ,4007 ,4013 ,4019 ,4021 ,4027 ,4049 ,
     32                 4051 ,4057 ,4073 ,4079 ,4091 ,4093 ,4099 ,4111 ,4127 ,4129 ,4133 ,4139 ,4153 ,4157 ,4159 ,
     33                 4177 ,4201 ,4211 ,4217 ,4219 ,4229 ,4231 ,4241 ,4243 ,4253 ,4259 ,4261 ,4271 ,4273 ,4283 ,
     34                 4289 ,4297 ,4327 ,4337 ,4339 ,4349 ,4357 ,4363 ,4373 ,4391 ,4397 ,4409 ,4421 ,4423 ,4441 ,
     35                 4447 ,4451 ,4457 ,4463 ,4481 ,4483 ,4493 ,4507 ,4513 ,4517 ,4519 ,4523 ,4547 ,4549 ,4561 ,
     36                 4567 ,4583 ,4591 ,4597 ,4603 ,4621 ,4637 ,4639 ,4643 ,4649 ,4651 ,4657 ,4663 ,4673 ,4679 ,
     37                 4691 ,4703 ,4721 ,4723 ,4729 ,4733 ,4751 ,4759 ,4783 ,4787 ,4789 ,4793 ,4799 ,4801 ,4813 ,
     38                 4817 ,4831 ,4861 ,4871 ,4877 ,4889 ,4903 ,4909 ,4919 ,4931 ,4933 ,4937 ,4943 ,4951 ,4957 ,
     39                 4967 ,4969 ,4973 ,4987 ,4993 ,4999 ,5003 ,5009 ,5011 ,5021 ,5023 ,5039 ,5051 ,5059 ,5077 ,
     40                 5081 ,5087 ,5099 ,5101 ,5107 ,5113 ,5119 ,5147 ,5153 ,5167 ,5171 ,5179 ,5189 ,5197 ,5209 ,
     41                 5227 ,5231 ,5233 ,5237 ,5261 ,5273 ,5279 ,5281 ,5297 ,5303 ,5309 ,5323 ,5333 ,5347 ,5351 ,
     42                 5381 ,5387 ,5393 ,5399 ,5407 ,5413 ,5417 ,5419 ,5431 ,5437 ,5441 ,5443 ,5449 ,5471 ,5477 ,
     43                 5479 ,5483 ,5501 ,5503 ,5507 ,5519 ,5521 ,5527 ,5531 ,5557 ,5563 ,5569 ,5573 ,5581 ,5591 ,
     44                 5623 ,5639 ,5641 ,5647 ,5651 ,5653 ,5657 ,5659 ,5669 ,5683 ,5689 ,5693 ,5701 ,5711 ,5717 ,
     45                 5737 ,5741 ,5743 ,5749 ,5779 ,5783 ,5791 ,5801 ,5807 ,5813 ,5821 ,5827 ,5839 ,5843 ,5849 ,
     46                 5851 ,5857 ,5861 ,5867 ,5869 ,5879 ,5881 ,5897 ,5903 ,5923 ,5927 ,5939 ,5953 ,5981 ,5987 ,
     47                 6007 ,6011 ,6029 ,6037 ,6043 ,6047 ,6053 ,6067 ,6073 ,6079 ,6089 ,6091 ,6101 ,6113 ,6121 ,
     48                 6131 ,6133 ,6143 ,6151 ,6163 ,6173 ,6197 ,6199 ,6203 ,6211 ,6217 ,6221 ,6229 ,6247 ,6257 ,
     49                 6263 ,6269 ,6271 ,6277 ,6287 ,6299 ,6301 ,6311 ,6317 ,6323 ,6329 ,6337 ,6343 ,6353 ,6359 ,
     50                 6361 ,6367 ,6373 ,6379 ,6389 ,6397 ,6421 ,6427 ,6449 ,6451 ,6469 ,6473 ,6481 ,6491 ,6521 ,
     51                 6529 ,6547 ,6551 ,6553 ,6563 ,6569 ,6571 ,6577 ,6581 ,6599 ,6607 ,6619 ,6637 ,6653 ,6659 ,
     52                 6661 ,6673 ,6679 ,6689 ,6691 ,6701 ,6703 ,6709 ,6719 ,6733 ,6737 ,6761 ,6763 ,6779 ,6781 ,
     53                 6791 ,6793 ,6803 ,6823 ,6827 ,6829 ,6833 ,6841 ,6857 ,6863 ,6869 ,6871 ,6883 ,6899 ,6907 ,
     54                 6911 ,6917 ,6947 ,6949 ,6959 ,6961 ,6967 ,6971 ,6977 ,6983 ,6991 ,6997 ,7001 ,7013 ,7019 ,
     55                 7027 ,7039 ,7043 ,7057 ,7069 ,7079 ,7103 ,7109 ,7121 ,7127 ,7129 ,7151 ,7159 ,7177 ,7187 ,
     56                 7193 ,7207 ,7211 ,7213 ,7219 ,7229 ,7237 ,7243 ,7247 ,7253 ,7283 ,7297 ,7307 ,7309 ,7321 ,
     57                 7331 ,7333 ,7349 ,7351 ,7369 ,7393 ,7411 ,7417 ,7433 ,7451 ,7457 ,7459 ,7477 ,7481 ,7487 ,
     58                 7489 ,7499 ,7507 ,7517 ,7523 ,7529 ,7537 ,7541 ,7547 ,7549 ,7559 ,7561 ,7573 ,7577 ,7583 ,
     59                 7589 ,7591 ,7603 ,7607 ,7621 ,7639 ,7643 ,7649 ,7669 ,7673 ,7681 ,7687 ,7691 ,7699 ,7703 ,
     60                 7717 ,7723 ,7727 ,7741 ,7753 ,7757 ,7759 ,7789 ,7793 ,7817 ,7823 ,7829 ,7841 ,7853 ,7867 ,
     61                 7873 ,7877 ,7879 ,7883 ,7901 ,7907 ,7919 ,7927 ,7933 ,7937 ,7949 ,7951 ,7963 ,7993 ,8009 ,
     62                 8011 ,8017 ,8039 ,8053 ,8059 ,8069 ,8081 ,8087 ,8089 ,8093 ,8101 ,8111 ,8117 ,8123 ,8147 ,
     63                 8161 ,8167 ,8171 ,8179 ,8191 ,8209 ,8219 ,8221 ,8231 ,8233 ,8237 ,8243 ,8263 ,8269 ,8273 ,
     64                 8287 ,8291 ,8293 ,8297 ,8311 ,8317 ,8329 ,8353 ,8363 ,8369 ,8377 ,8387 ,8389 ,8419 ,8423 ,
     65                 8429 ,8431 ,8443 ,8447 ,8461 ,8467 ,8501 ,8513 ,8521 ,8527 ,8537 ,8539 ,8543 ,8563 ,8573 ,
     66                 8581 ,8597 ,8599 ,8609 ,8623 ,8627 ,8629 ,8641 ,8647 ,8663 ,8669 ,8677 ,8681 ,8689 ,8693 ,
     67                 8699 ,8707 ,8713 ,8719 ,8731 ,8737 ,8741 ,8747 ,8753 ,8761 ,8779 ,8783 ,8803 ,8807 ,8819 ,
     68                 8821 ,8831 ,8837 ,8839 ,8849 ,8861 ,8863 ,8867 ,8887 ,8893 ,8923 ,8929 ,8933 ,8941 ,8951 ,
     69                 8963 ,8969 ,8971 ,8999 ,9001 ,9007 ,9011 ,9013 ,9029 ,9041 ,9043 ,9049 ,9059 ,9067 ,9091 ,
     70                 9103 ,9109 ,9127 ,9133 ,9137 ,9151 ,9157 ,9161 ,9173 ,9181 ,9187 ,9199 ,9203 ,9209 ,9221 ,
     71                 9227 ,9239 ,9241 ,9257 ,9277 ,9281 ,9283 ,9293 ,9311 ,9319 ,9323 ,9337 ,9341 ,9343 ,9349 ,
     72                 9371 ,9377 ,9391 ,9397 ,9403 ,9413 ,9419 ,9421 ,9431 ,9433 ,9437 ,9439 ,9461 ,9463 ,9467 ,
     73                 9473 ,9479 ,9491 ,9497 ,9511 ,9521 ,9533 ,9539 ,9547 ,9551 ,9587 ,9601 ,9613 ,9619 ,9623 ,
     74                 9629 ,9631 ,9643 ,9649 ,9661 ,9677 ,9679 ,9689 ,9697 ,9719 ,9721 ,9733 ,9739 ,9743 ,9749 ,
     75                 9767 ,9769 ,9781 ,9787 ,9791 ,9803 ,9811 ,9817 ,9829 ,9833 ,9839 ,9851 ,9857 ,9859 ,9871 ,
     76                 9883 ,9887 ,9901 ,9907 ,9923 ,9929 ,9931 ,9941 ,9949 ,9967 ,9973
     77     };
     78 
     79     static int check(int x){
     80         for(int i = 0;i < list.length;i ++){
     81             if(list[i] == x){return 1;}
     82         }
     83         return 0;
     84     }
     85 
     86     public static void main(String[] args){
     87         Scanner sc = new Scanner(System.in);
     88         int T = sc.nextInt();
     89         while(T > 0){
     90             int flag = 0;
     91             int vis[] = new int[10000];
     92             for(int i = 0;i < 10000;i ++){
     93                 vis[i] = 0;
     94             }
     95             Queue<Integer> m = new LinkedList<Integer>();
     96             int st = sc.nextInt();
     97             int ed = sc.nextInt();
     98             if(st == ed){System.out.println("0");T --;continue;}
     99             m.offer(st);
    100             vis[st] = 1;
    101             while( m.size() != 0 && flag == 0){
    102                 int tmp = m.peek(); 
    103                 m.poll();
    104                 String tt = String.valueOf(tmp);
    105                 int tho = String.valueOf(tmp).charAt(0) - '0';
    106                 int hun = String.valueOf(tmp).charAt(1) - '0';
    107                 int dec = String.valueOf(tmp).charAt(2) - '0';
    108                 int uni = String.valueOf(tmp).charAt(3) - '0';
    109 
    110                 //System.out.print(tho);
    111                 //System.out.print(hun);
    112                 //System.out.print(dec);
    113                 //System.out.println(uni);
    114     
    115                 for(int i = 1;i <= 9;i ++){
    116                     if(i != tho){
    117                         String _t = String.valueOf(i) + tt.substring(1);
    118                         int t = Integer.valueOf(_t);
    119                         if(check(t) == 1 && vis[t] == 0){m.offer(t);vis[t] = vis[tmp] + 1;}
    120                         if(t == ed){flag = 1;break;}
    121                     }
    122                 }
    123                 for(int i = 0;i <= 9;i ++){
    124                     if(i != hun){
    125                         String _t = tt.substring(0,1) + String.valueOf(i) + tt.substring(2);
    126                         int t = Integer.valueOf(_t);
    127                         if(check(t) == 1 && vis[t] == 0){m.offer(t);vis[t] = vis[tmp] + 1;}
    128                         if(t == ed){flag = 1;break;}
    129                     }
    130                 }
    131                 for(int i = 0;i <= 9;i ++){
    132                     if(i != dec){
    133                         String _t = tt.substring(0,2) + String.valueOf(i) + tt.substring(3);
    134                         int t = Integer.valueOf(_t);
    135                         if(check(t) == 1 && vis[t] == 0){m.offer(t);vis[t] = vis[tmp] + 1;}
    136                         if(t == ed){flag = 1;break;}
    137                     }
    138                 }
    139                 for(int i = 0;i <= 9;i ++){
    140                     if(i != uni){
    141                         String _t = tt.substring(0,3) + String.valueOf(i);
    142                         int t = Integer.valueOf(_t);
    143                         if(check(t) == 1 && vis[t] == 0){m.offer(t);vis[t] = vis[tmp] + 1;}
    144                         if(t == ed){flag = 1;break;}
    145                     }
    146                 }
    147             }
    148 
    149             if(m.size() == 0){System.out.println("Impossible");}
    150             else{System.out.println(vis[ed] - 1);}
    151 
    152             T --;
    153         }
    154     }
    155 }
  • 相关阅读:
    Java中使用Lua脚本语言(转)
    lua、groovy嵌入到java中的性能对比(转)
    有人实践过 Phabricator 以及 Arcanist 作为 code review 的工具么?(转)
    Lua Development Tools (LDT)
    海量数据处理面试题集锦
    三层架构之抽象工厂加反射----实现数据库转换
    八卦一下
    java实现各种数据统计图(柱形图,饼图,折线图)
    activity-alias的使用
    C#反射Assembly 具体说明
  • 原文地址:https://www.cnblogs.com/love-fromAtoZ/p/7596867.html
Copyright © 2011-2022 走看看