Prime Path (bfs+优化)
来源:互联网 发布:js object to map 编辑:程序博客网 时间:2024/05/16 16:31
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.
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
31033 81791373 80171033 1033
670
改了好几次终于对了,无论多么乱,多么长,代码还是要清晰,对于素数的判断,用的多的话,可以直接用一个数组来直接存储嘛,这里的素数存储很巧妙,主要来对合数进行处理,未处理的就是素数,对于每一个因子算式进行枚举
#include <iostream>#include <queue>#include <cstdio>#include <cstring>#include <cmath>#define maxx 10010using namespace std;int n,m;int visit[maxx];int isprime[maxx];struct note{ int x,step;}st,ed;//相对快速的素数标记方法void judge_prime(){ int i,j; memset(isprime,0,sizeof(isprime)); isprime[0]=1;isprime[1]=1; for(i=2;i<(sqrt(maxx)+1);i++) { if(!isprime[i]) { for(j=i*i;j<=maxx;j=j+i) { isprime[j]=1; } } }}int bfs(){ int i; queue<note>Q; st.x=n; st.step=0; Q.push(st); visit[n]=1; while(!Q.empty()) { st=Q.front(); Q.pop(); if(st.x==m) { return st.step; } int k=st.x/1000; for(i=1;i<k;i++) { ed.x=st.x-i*1000; if(!isprime[ed.x]&&!visit[ed.x]) { ed.step=st.step+1; Q.push(ed); visit[ed.x]=1; } } for(i=1;i<(10-k);i++) { ed.x=st.x+i*1000; if(!isprime[ed.x]&&!visit[ed.x]) { ed.step=st.step+1; Q.push(ed); visit[ed.x]=1; } } k=(st.x-k*1000)/100; for(i=1;i<=k;i++) { ed.x=st.x-i*100; if(!isprime[ed.x]&&!visit[ed.x]) { ed.step=st.step+1; Q.push(ed); visit[ed.x]=1; } } for(i=1;i<(10-k);i++) { ed.x=st.x+i*100; if(!isprime[ed.x]&&!visit[ed.x]) { ed.step=st.step+1; Q.push(ed); visit[ed.x]=1; } } k=(st.x/10)%10; for(i=1;i<=k;i++) { ed.x=st.x-i*10; if(!isprime[ed.x]&&!visit[ed.x]) { ed.step=st.step+1; Q.push(ed); visit[ed.x]=1; } } for(i=1;i<(10-k);i++) { ed.x=st.x+i*10; if(!isprime[ed.x]&&!visit[ed.x]) { ed.step=st.step+1; Q.push(ed); visit[ed.x]=1; } } k=st.x%10; for(i=2;i<=k;i=i+2) { ed.x=st.x-i; if(!isprime[ed.x]&&!visit[ed.x]) { ed.step=st.step+1; Q.push(ed); visit[ed.x]=1; } } for(i=2;i<(10-k);i=i+2) { ed.x=st.x+i; if(!isprime[ed.x]&&!visit[ed.x]) { ed.step=st.step+1; Q.push(ed); visit[ed.x]=1; } } } return 0;}int main(){ int num; judge_prime(); scanf("%d",&num); while(num--) { scanf("%d %d",&n,&m); memset(visit,0,sizeof(visit)); if(n==m) { printf("0\n"); continue ; } else { int ans=bfs(); if(ans==0) printf("Impossible\n"); else printf("%d\n",ans); } } return 0;}
- Prime Path (bfs+优化)
- Prime Path(bfs)
- Prime Path(bfs)
- Prime Path--(bfs)
- 1444. Prime Path (bfs)
- POJ3126--Prime Path(BFS)
- poj_3126 Prime Path(bfs)
- poj Prime Path(BFS)
- Prime Path (bfs)POJ
- poj 3126 Prime Path(bfs搜索)
- pku 3126 Prime Path (bfs)
- poj poj 3126 Prime Path(BFS)
- POJ 3216 Prime Path(数字BFS)
- POJ 3126 Prime Path (BFS)
- poj 3126 Prime Path(BFS)
- hdu 1973 Prime Path (bfs)
- poj 3126 Prime Path (bfs)
- POJ 3126 Prime Path(BFS算法)
- 【c++】c++初识--基本知识梳理(1)
- java synchronized详解
- Android新的menu实现——ActionMode
- struts2的核心和工作原理
- 多字段模糊查询,前一个字段无搜索结果返回null时不影响后一个字段模糊查询
- Prime Path (bfs+优化)
- XmlBeanFactory加载bean的过程
- windows 无法连接本地虚拟机
- Deep Learning for Chatbots, Part 2 – Implementing a Retrieval-Based Model in Tensorflow
- Python IDE
- velocity插件 -- veloeclipse
- Android ListView selected默认选中第一个position解决办法
- 九度 oj 题目1037:Powerful Calculator
- 批处理BAT命令ECHO 和 @