zoukankan      html  css  js  c++  java
  • POJ 3126 Prime Path

      1 #include<cstdio>
      2 #include<cstring>
      3 #include<cmath>
      4 #include<queue>
      5 #include<algorithm>
      6 using namespace std;
      7 
      8 int n, m;
      9 const int N = 1e4 + 100;
     10 int vis[N];
     11 struct node
     12 {
     13     int x, step;
     14 };
     15 queue<node> Q;
     16 
     17 bool judge_prime(int digit) //判断素数
     18 {
     19     if(digit==2 || digit==3)
     20         return true;
     21     else if(digit<=1 || digit%2==0)
     22         return false;
     23     else
     24     {
     25         for(int i=3;i*i<=digit;i+=2)
     26             if(digit%i==0)
     27                 return false;
     28         return true;
     29     }
     30 }
     31 
     32 void BFS()
     33 {
     34     int X, STEP, i;
     35     while(!Q.empty())
     36     {
     37         node tmp;
     38         tmp = Q.front();
     39         Q.pop();
     40         X = tmp.x;
     41         STEP = tmp.step;
     42         if(X == m)
     43         {
     44             printf("%d
    ",STEP);
     45             return ;
     46         }
     47         for(i = 1; i <= 9; i += 2) //个位
     48         {
     49             int s = X / 10 * 10 + i;
     50             if(s != X && !vis[s] && judge_prime(s))
     51             {
     52                 vis[s] = 1;
     53                 node temp;
     54                 temp.x = s;
     55                 temp.step = STEP + 1;
     56                 Q.push(temp);
     57             }
     58         }
     59         for(i = 0; i <= 9; i++) //十位
     60         {
     61             int s = X / 100 * 100 + i * 10 + X % 10;
     62             if(s != X && !vis[s] && judge_prime(s))
     63             {
     64                 vis[s] = 1;
     65                 node temp;
     66                 temp.x = s;
     67                 temp.step = STEP + 1;
     68                 Q.push(temp);
     69             }
     70         }
     71         for(i = 0; i <= 9; i++) //百位
     72         {
     73             int s = X / 1000 * 1000 + i * 100 + X % 100;
     74             if(s != X && !vis[s] && judge_prime(s))
     75             {
     76                 vis[s] = 1;
     77                 node temp;
     78                 temp.x = s;
     79                 temp.step = STEP + 1;
     80                 Q.push(temp);
     81             }
     82         }
     83         for(i = 1; i <= 9; i++) //千位
     84         {
     85             int s = i * 1000 + X % 1000;
     86             if(s != X && !vis[s] && judge_prime(s))
     87             {
     88                 vis[s] = 1;
     89                 node temp;
     90                 temp.x = s;
     91                 temp.step = STEP + 1;
     92                 Q.push(temp);
     93             }
     94         }
     95     }
     96     printf("Impossible
    ");
     97     return ;
     98 }
     99 
    100 int main()
    101 {
    102     int t;
    103     scanf("%d",&t);
    104     while(t--)
    105     {
    106         while(!Q.empty()) Q.pop();
    107         scanf("%d%d",&n,&m);
    108         memset(vis,0,sizeof(vis));
    109         vis[n] = 1;
    110         node tmp;
    111         tmp.x = n;
    112         tmp.step = 0;
    113         Q.push(tmp);
    114         BFS();
    115     }
    116     return 0;
    117 }
  • 相关阅读:
    《JavaScript高级程序设计》读书笔记 14章
    C# 程序集是啥
    C#之反射又是什么东西
    C#版 大数计算器加法
    C#版 大数计算器乘法
    我所认识的三层
    《JavaScript高级程序设计》读书笔记 56章
    C# 委托加深理解
    C#版 大数计算器减法
    C# 事件到底是什么
  • 原文地址:https://www.cnblogs.com/ducklu/p/9301990.html
Copyright © 2011-2022 走看看