zoukankan      html  css  js  c++  java
  • poj 3126 BFS

    Prime Path

    Time Limit: 1000MS
    Memory Limit:65536K

    Total Submissions: 6713
    Accepted:3808

    Description

    The ministers of the cabinet were quite upset by the message from the Chief of Security stating that they would all have to change the four-digit room numbers on their offices.
    — It is a matter of security to change such things every now and then, to keep the enemy in the dark.
    — But look, I have chosen my number 1033 for good reasons. I am the Prime minister, you know!
    — I know, so therefore your new number 8179 is also a prime. You will just have to paste four new digits over the four old ones on your office door.
    — No, it’s not that simple. Suppose that I change the first digit to an 8, then the number will read 8033 which is not a prime!
    — I see, being the prime minister you cannot stand having a non-prime number on your door even for a few seconds.
    — Correct! So I must invent a scheme for going from 1033 to 8179 by a path of prime numbers where only one digit is changed from one prime to the next prime.
    Now, the minister of finance, who had been eavesdropping, intervened.
    — No unnecessary expenditure, please! I happen to know that the price of a digit is one pound.
    — Hmm, in that case I need a computer program to minimize the cost. You don't know some very cheap software gurus, do you?
    — In fact, I do. You see, there is this programming contest going on... Help the prime minister to find the cheapest prime path between any two given four-digit primes! The first digit must be nonzero, of course. Here is a solution in the case above.

    1033
    1733
    3733
    3739
    3779
    8779
    8179

    The cost of this solution is 6 pounds. Note that the digit 1 which got pasted over in step 2 can not be reused in the last step – a new 1 must be purchased.

    Input

    One line with a positive number: the number of test cases (at most 100). Then for each test case, one line with two numbers separated by a blank. Both numbers are four-digit primes (without leading zeros).

    Output

    One line for each case, either with a number stating the minimal cost or containing the word Impossible.

    Sample Input

    3
    1033 8179
    1373 8017
    1033 1033

    Sample Output

    6
    7
    0
       1: #include <iostream>
       2: #include <queue>
       3: #include <cstring>
       4: #include <cmath>
       5: #include <cstdio>
       6: using namespace std;
       7: int first,last;
       8: int step[10000];
       9: bool isPrime(int a)
      10: {
      11:     bool flag=true;
      12:     for(int i=2;i<=(sqrt(float(a)));++i)
      13:         if(a%i==0){flag=false;break;}
      14:     return flag;
      15: }
      16: int bfs()
      17: {
      18:     memset(step,-1,sizeof(step));
      19:     queue<int> s;
      20:     s.push(first);
      21:     step[first] = 0;
      22:     int temp;
      23:     while(!s.empty())
      24:     {
      25:         int dequeue = s.front();
      26:         s.pop();
      27:         if(dequeue == last)
      28:             return step[dequeue];
      29:         for(int i=0;i<10;++i)
      30:         {
      31:             temp = (dequeue/10)*10+i;
      32:             if(isPrime(temp) && step[temp] == -1)
      33:             {
      34:                 step[temp] = step[dequeue] + 1;
      35:                 s.push(temp);
      36:             }
      37:         }
      38:         for(int i=0;i<10;++i)
      39:         {
      40:             temp = (dequeue/100)*100+dequeue%10+i*10;
      41:             if(isPrime(temp) && step[temp] == -1)
      42:             {
      43:                 step[temp] = step[dequeue] + 1;
      44:                 s.push(temp);
      45:             }
      46:         }
      47:         for(int i=0;i<10;++i)
      48:         {
      49:             temp = (dequeue/1000)*1000+dequeue%100+i*100;
      50:             if(isPrime(temp) && step[temp] == -1)
      51:             {
      52:                 step[temp] = step[dequeue] + 1;
      53:                 s.push(temp);
      54:             }
      55:         }
      56:         for(int i=1;i<10;++i)
      57:         {
      58:             temp = dequeue%1000+i*1000;
      59:             if(isPrime(temp) && step[temp] == -1)
      60:             {
      61:                 step[temp] = step[dequeue] + 1;
      62:                 s.push(temp);
      63:             }
      64:         }
      65:  
      66:     }
      67:     return -1;
      68: }
      69: int main()
      70: {
      71:     int n,result;
      72:     scanf("%d",&n);
      73:     while(n--)
      74:     {
      75:         scanf("%d%d",&first,&last);
      76:         result = bfs();
      77:         if(result == -1) printf("Impossible\n");
      78:         else printf("%d\n",result);
      79:     }
      80:     return 0;
      81: }
  • 相关阅读:
    dede标签:定义文件夹
    SendCloud邮件中为什么会显示代发
    中国天气网天气预报接口api
    话说TP框架里的Vendor这目录是干什么用的啊?类库扩展thinkphp3.1版本
    微信公众号tp3.2放进Model无效,几种实例化的方法试过,还是提示无法提供服务...
    WCF服务编程读书笔记(5):操作
    spingmvc relevent article
    testng
    sts 配置
    一个spring mvc 的例子,带源码的,
  • 原文地址:https://www.cnblogs.com/bovine/p/2348627.html
Copyright © 2011-2022 走看看