zoukankan      html  css  js  c++  java
  • (广度搜索)A

    A - Prime Path(11.1.1)
    Time Limit:1000MS    Memory Limit:65536KB    64bit IO Format:%I64d & %I64u

    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
    
    #include <iostream>
    #include <cstring>
    #include <queue>
    using namespace std;
    bool num[10001],used[10001];
    int s,e;
    void prim()//判断素数
    {
    	memset(num,true,sizeof(num));
    	for(int i=2;i*i<10001;i++)
    	{
    		if(num[i])
    		{
    			for(int j=i+i;j<10000;j=j+i)
    				num[j]=false;
    		}
    	}
    	memset(num,false,1000);
    }
    struct node
    {
    	int x,step; 
    };
    int d[4]={1,10,100,1000};//位数
    int bfs(int x)
    {
    	queue<node> que;
    	node tp,num;
    	int tx;
    	num.x=x,num.step=0;
    	used[x]=false,que.push(num);
    	while(!que.empty())
    	{
    		tp=que.front();
    		que.pop();
    		for(int i=0;i<4;i++)
    			for(int j=0;j<=9;j++)
    				if(i==3&&j==0)
    					continue;
    				else
    				{
    					if(j!=(tp.x/d[i]%10))
    					{
    						tx=((tp.x/d[i]/10)*10+j)*d[i]+tp.x%d[i];
    						if(used[tx])
    						{
    							used[tx]=false,num.x=tx,num.step=tp.step+1,que.push(num);
    							if(num.x==e)
    								return num.step;
    						}
    					}
    				}
    				
    	}
    }
    int main()
    {
    	int t;
    	cin>>t;
    	prim();
    	while(t--)
    	{
    		cin>>s>>e;
    		memcpy(used,num,10000);
    		if(s==e)
    			cout<<"0"<<endl;
    		else cout<<bfs(s)<<endl;
    	}
    	return 0;
    }
    
    




  • 相关阅读:
    开启JAVA学习之旅 Day1
    python二分法及小tips
    简单的注入脚本
    Requests文档 阅读笔记
    多线程
    IO操作
    异常Exception
    Map集合
    Collection集合
    泛型
  • 原文地址:https://www.cnblogs.com/u013533289/p/4477296.html
Copyright © 2011-2022 走看看