poj-3126 Prime Path
2015-08-19 09:16
225 查看
题目描述其实就是篇小故事,不多解释直接说明题意。题意要求给两个4位的素数,求出将前一个素数转化为后一个素数需要的步数。一次只能改变一位数字,且保证每次改变得到的数都是素数
思路:用BFS暴搜,每次改变一位数如果是素数就进入队列,但是暴搜的前提要把1w以内的素数筛出来。为了方便对每一位上的数的操作,本人用的字符串来储存4位数字。
思路:用BFS暴搜,每次改变一位数如果是素数就进入队列,但是暴搜的前提要把1w以内的素数筛出来。为了方便对每一位上的数的操作,本人用的字符串来储存4位数字。
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <queue> #define INF 0x3f3f3f3f #define mod 1000000007 using namespace std; bool prime[10001]; bool flag[10001]; struct node { char str[6]; int step; }turn; void getprime() { for (int i=2;i*i<=10000;i++) { if(!prime[i]) for (int j=i;j*i<=10000;j++) { prime[i*j]=1; } } } int BFS(char a[],char b[]) { if(strcmp(a,b)==0) return 0; queue<node>Q; int i,j,num,step; char x; strcpy(turn.str,a); turn.step=0; num=(turn.str[0]-'0')*1000+(turn.str[1]-'0')*100+(turn.str[2]-'0')*10+turn.str[3]-'0'; flag[num]=1; Q.push(turn); while(!Q.empty()) { turn=Q.front(); step=turn.step; Q.pop(); for (i=0;i<=3;i++) { x=turn.str[i]; i==0 ? j='1' : j='0'; for(;j<='9';j++) { if(j==x) continue; turn.str[i]=j; turn.step=step+1; if(strcmp(turn.str,b)==0) return turn.step; num=(turn.str[0]-'0')*1000+(turn.str[1]-'0')*100+(turn.str[2]-'0')*10+turn.str[3]-'0'; if(!prime[num]&&!flag[num]) { flag[num]=1; Q.push(turn); } } turn.str[i]=x; } } return -1; } int main() { getprime(); int t,step; char x[6],y[6]; scanf("%d",&t); while(t--) { memset(flag,0,sizeof(flag)); scanf("%s%s",x,y); step=BFS(x,y); printf("%d\n",step); } return 0; }
相关文章推荐
- 算法竞赛入门经典:第八章 高效算法设计 8.9棋盘覆盖
- Metronic 定制主题
- 互斥锁设计,有效的避免死锁
- CentOs笔记
- 对List进行高效的排序和倒排序代码实战之Scala学习笔记-26
- tools:context=".MainActivity的作用
- git 提交前撤销add操作
- OC类的深入研究
- poj2253 最小生成树中的最大边 prim
- LeetCode Binary Tree Preorder Traversal
- HDU 5400 Arithmetic Sequence(2015 Multi-University Training Contest 9 2015多校联合)
- SVM 多分类 -SVM分类opencv3.0源代码
- HDU 1269 -- 迷宫城堡【有向图求SCC的数目 && 模板】
- BZOJ 1695 [Usaco2007 Demo]Walk the Talk 链表+数学
- LeetCode Binary Tree Preorder Traversal
- iOS 网络请求,参数中字典嵌套字典
- UVA - 11346 Probability (概率)
- Chrome清除dns缓存
- Win10 Mobile应用商店更新 大波应用更新下载
- 图结构练习——BFSDFS——判断可达性--------BFS——从起始点到目标点的最短步数