poj 3126 Prime Path(BFS)
来源:互联网 发布:datagridview清除数据 编辑:程序博客网 时间:2024/05/16 10:48
Prime Path
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 12421 Accepted: 7031
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.
— 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.
1033The 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.
1733
3733
3739
3779
8779
8179
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
31033 81791373 80171033 1033
Sample Output
670
Source
Northwestern Europe 2006
大致题意:
给定两个四位素数a,b,要求把a变换到b
变换的过程要保证每次变换出来的数都是一个四位素数,而且当前这步的变换所得的素数与前一步得到的素数只能有一个位不同,而且每步得到的素数都不能重复。
求从a到b最少需要的变换次数。无法变换则输出Impossible
- Source Code
#include<iostream>#include<algorithm>#include<stdio.h>#include<string.h>#include<stdlib.h>using namespace std;struct node{ int x; int cnt;}q1[90000001];int v[100001];const int Max = 1000001;bool flag[Max];int prime[Max],pi;int s,e;void saixuan(){ int i,j; pi = 0; memset(flag,0,sizeof(flag)); for(i=2;i<Max;i++) { if(flag[i] == 0) { prime[pi++] = i; } for(j=0;(j<pi) && (i*prime[j]<Max);j++) { flag[i*prime[j]] = 1; if(i%prime[j] == 0) { break; } } }}void BFS(int n,int m){ struct node t,f; t.x = n; t.cnt = 0; q1[e++] = t; v[t.x] = 1; while(s<e) { t = q1[s++]; if(t.x == m) { printf("%d\n",t.cnt); return ; } int t1,t2,t3,t4; t1 = t.x/1000; t2 = t.x/100 - t1*10; t3 = t.x/10 - t1*100 - t2*10; t4 = t.x%10; // printf("t1 = %d t2 = %d t3 = %d t4 = %d t.cnt = %d flag[%d] = %d\n",t1,t2,t3,t4,t.cnt,t.x,flag[t.x]); for(int i=1;i<10;i++) { int h = i*1000 + t2*100 + t3*10 + t4; if(v[h] == 0 && flag[h] == 0) { if(h == m) { f.cnt = t.cnt + 1; printf("%d\n",f.cnt); return ; } f.x = h; f.cnt = t.cnt + 1; q1[e++] = f; v[h] = 1; } } for(int i=0;i<=9;i++) { int h1 = t1 * 1000 + i * 100 + t3 * 10 + t4; int h2 = t1 * 1000 + t2 * 100 + i * 10 + t4; int h3 = t1 * 1000 + t2 * 100 + t3 * 10 + i; if(v[h1] == 0 && flag[h1] == 0) { f.x = h1; f.cnt = t.cnt + 1; q1[e++] = f; v[h1] = 1; if(h1 == m) { f.cnt = t.cnt + 1; printf("%d\n",f.cnt); return ; } } if(v[h2] == 0 && flag[h2] == 0) { f.x = h2; f.cnt = t.cnt + 1; q1[e++] = f; v[h2] = 1; if(h2 == m) { f.cnt = t.cnt + 1; printf("%d\n",f.cnt); return ; } } if(v[h3] == 0 && flag[h3] == 0) { if(h3 == m) { f.cnt = t.cnt + 1; printf("%d\n",f.cnt); return ; } f.x = h3; f.cnt = t.cnt + 1; q1[e++] = f; v[h3] = 1; } } }}int main(){ int n,m; int T; saixuan(); scanf("%d",&T); while(T--) { s = 0; e = 0; scanf("%d%d",&n,&m); memset(v,0,sizeof(v)); BFS(n,m); } return 0;}
0 0
- poj poj 3126 Prime Path(BFS)
- poj 3126 Prime Path(bfs搜索)
- POJ 3126 Prime Path (BFS)
- poj 3126 Prime Path(BFS)
- poj 3126 Prime Path (bfs)
- POJ 3126 Prime Path(BFS算法)
- Prime Path (poj 3126 bfs)
- POJ 3126 Prime Path(BFS)
- POJ 3126 - Prime Path(BFS)
- poj 3126 Prime Path(BFS)
- POJ 3126 Prime Path(BFS)
- POJ 3126 Prime Path (bfs、埃氏筛法)
- POJ 3126 Prime Path (BFS)
- POJ 3126 Prime Path(bfs)
- POJ 3126 Prime Path (BFS)
- POJ 3126 Prime Path (BFS)
- POJ 3126 Prime Path (BFS)
- POJ 3126 Prime Path(BFS)
- 【BZOJ 1020】 [SHOI2008]安全的航线flight
- 快速解决 Error 45 initializing SQL*Plus 错误
- oracle data guard
- 随机数
- SVN服务器安装使用详细教程
- poj 3126 Prime Path(BFS)
- Phone List
- MTK平台下的sensor操作
- 8 GestureDetector
- java操作.properties属性文件
- hdu 4035 经典概率dp求期望
- 改写Restful2ActionMapper让Struts2支持REST风格的URL映射
- couchbase view
- java中向Jscrollpane中加入Jpanel