• poj 3126 Prime Path


    今天这题算是巩固BFS了,昨天的经验是把“判断”转到一个位置,就能大幅度提高效率,今天更奇葩,我按照昨天总结的“完善”的方法,超了一次又一次时,仿佛昨天都是浮云。最后又把判断移了一个位置,奇迹出现了,从TLE变为16ms,难怪说搜索的效率都很低,今天算是明白了。

     1 #include <stdio.h>
     2 #include <string.h>
     3 bool isprime[10005],vis[10005];
     4 int a,b,step[4000],d[4];
     5 int head,end,q[4000];
     6 int bfs()
     7 {
     8     int m,n,i,j;
     9     head = end = 0;
    10     q[0] = a;
    11     vis[a] = 1;
    12     step[0] = 0;
    13     while(head <= end)
    14     {
    15         m = q[head];
    16         d[0] = m %10;
    17         d[1] = m %100 /10;
    18         d[2] = m %1000 /100;
    19         d[3] = m /1000;
    20         for(i = 0; i < 4; i++)
    21             for(j = 0; j < 10; j++)
    22             {
    23                 d[i] = (++d[i]) %10;
    24                 if(!d[3]) continue;
    25                 n = d[3]*1000 + d[2]*100 + d[1]*10 + d[0];
    26                 if(isprime[n] && !vis[n])
    27                 {
    28                     if(n == b)
    29                         return step[head]+1;
    30                     q[++end] = n;
    31                     step[end] = step[head]+1;
    32                     vis[n] = 1;
    33                 }
    34             }
    35         head++;
    36     }
    37     return -1;
    38 }
    39 int main()
    40 {
    41     int i,j,n,ans;
    42     memset(isprime,1,sizeof(vis));
    43     isprime[1] = 0;
    44     for(i = 2; i < 100; i++)
    45         if(isprime[i])
    46         for(j = i*i; j < 10005; j += i)
    47             isprime[j] = 0;
    48     ~scanf("%d",&n);
    49     while(n--)
    50     {
    51         scanf("%d%d",&a,&b);
    52         if(a == b)
    53         printf("0\n");
    54         else
    55         {
    56         memset(vis,0,sizeof(vis));
    57         ans = bfs();
    58         printf("%d\n",ans);}
    59     }
    60     return 0;
    61 }
  • 相关阅读:
    JUnit中的设计模式:组合模式 Composite
    Activity在屏幕显示的方向切换
    Jenkins插件之有用
    Jenkins插件之Dashboard和wall display
    python技巧32[常用技巧集]
    Jenkins插件之构建与MSBuild
    Jenkins插件之Publish Over SSH/CIFS/FTP
    使用devenv/MSBuild在命令行编译单个project
    Jenkins中执行batch和Python
    python翻译[排序高级]
  • 原文地址:https://www.cnblogs.com/lzxskjo/p/2596630.html
Copyright © 2020-2023  润新知