poj 3126 BFS
BFS得到的一定是最短路径。开始我还在纠结怎么才是最短的呢。其实BFS的题目有个共性(这不废话,哪一类题没有共性啊。呵呵)。以后做这种题自己慢慢总结吧。
这题的思路就是写枚举出4位数的所有prime number,用个数组p[]标记。再用个数组visit[]标记某个数是否被访问过,避免重复访问.然后就是对这四位数的每一位进行BFS啦!
#include <iostream>#include <cstdio>#include <queue>#include <fstream>#include <memory.h> using namespace std; int p[10000],visit[10000];int n,a,b;int Index[4];struct node{int num,step;}ans[10000]; bool prime(int n){for(int i=2; i*i<=n ; i++) {if(n%i==0)return false; }return true;} int bfs(){int j=0,i; queue<node> q; ans[j].num=a; ans[j].step=0; visit[a]=1; q.push(ans[j]);while(!q.empty()) { node next; next=q.front(); q.pop();if(next.num==b) {return next.step; } Index[0]=next.num/1000; Index[1]=(next.num%1000)/100; Index[2]=(next.num%100)/10; Index[3]=next.num%10;for(i=0 ; i<10 ;i++) {if(i==Index[3])continue;int l=next.num+i-Index[3];if(!visit[l] && p[l]) { ans[++j].num=l; ans[j].step=next.step+1; visit[l]=1; q.push(ans[j]); } }for(i=0 ; i<10 ;i++) {if(i==Index[2])continue;int l=next.num+(i-Index[2])*10;if(!visit[l] && p[l]) { ans[++j].num=l; ans[j].step=next.step+1; visit[l]=1; q.push(ans[j]); } }for(i=0 ; i<10 ;i++) {if(i==Index[1])continue;int l=next.num+(i-Index[1])*100;if(!visit[l] && p[l]) { ans[++j].num=l; ans[j].step=next.step+1; visit[l]=1; q.push(ans[j]); } }for( i=0 ; i<10 ;i++) {if(i==Index[0])continue;int l=next.num+(i-Index[0])*1000;if(!visit[l] && p[l]) { ans[++j].num=l; ans[j].step=next.step+1; visit[l]=1; q.push(ans[j]); } } } } int main(){ freopen("acm.txt","r",stdin); memset(p,0,sizeof(p)); scanf("%d",&n);for(int i=1000; i<10000; i++) {if(prime(i)) p[i]=1; //is prime number }while(n--) { memset(visit,0,sizeof(visit)); scanf("%d%d",&a,&b); printf("%d\n",bfs()); }return 0;}
转载于:https://www.cnblogs.com/Jason-Damon/archive/2012/03/14/2397114.html
poj 3126 BFS相关推荐
- POJ - 3126 - Prime Path(BFS)
Prime Path POJ - 3126 题意: 给出两个四位素数 a , b.然后从a开始,每次可以改变四位中的一位数字,变成 c,c 可以接着变,直到变成b为止.要求 c 必须是素数.求变换次数 ...
- POJ 3126 - Prime Path + Python(BFS)
()原题链接: # 原题:POJ 3126 - Prime Path | 眈眈探求 # 解题思路:https://blog.csdn.net/LYHVOYAGE/article/details/182 ...
- F - Prime Path POJ - 3126
F - Prime Path POJ - 3126 题意修改一个四位数质数的某一位,使得该质数又变为一个质数,求从当前数变为目标质数的最少变化次数. bfs枚举每一位的每种变化 #include< ...
- Prime Path POJ - 3126
题目链接:Prime Path POJ - 3126 =================================================== Prime Path Time Limit ...
- POJ 3126 Prime Path BFS搜索
题意:就是找最短的四位数素数路径 分析:然后BFS随便搜一下,复杂度最多是所有的四位素数的个数 #include<cstdio> #include<algorithm> #in ...
- POJ 3126 Prime Path(BFS 数字处理)
意甲冠军 给你两个4位质数a, b 每次你可以改变a个位数,但仍然需要素数的变化 乞讨a有多少次的能力,至少修改成b 基础的bfs 注意数的处理即可了 出队一个数 然后入队全部能够由这个素 ...
- 【POJ - 3126】Prime Path(bfs)
题干: 给你两个四位的素数a,b. a可以改变某一位上的数字变成c,但只有当c也是四位的素数时才能进行这种改变. 请你计算a最少经过多少次上述变换才能变成b. 例如:1033 -> 8179 ...
- POJ 3126 Prime Path 简单广搜(BFS)
题意:一个四位数的质数,每次只能变换一个数字,而且变换后的数也要为质数.给出两个四位数的质数,输出第一个数变换为第二个数的最少步骤. 利用广搜就能很快解决问题了.还有一个要注意的地方,千位要大于0.例 ...
- POJ 3126 Prime Path(BFS + 素数打表)
题意:给定两个四位素数, 从一个素数到另一个素数,最少用几步,可以一次更改四位中的任意一位,但每次改变都只能是素数. 解题思路:四位数每一位情况有十种情况0-9, 四位共有40种情况, 枚举40种情况 ...
最新文章
- Python读取文件编码及内容
- Spring基于注解的AOP配置
- wp转shp_【收藏】空间数据格式转换方法
- Matlab-重构和重新排列数组
- linux 如何让.开头的文件不隐藏_如何使用 BusyBox 制作Linux最小文件系统
- 如果你是IT技术人员,请思考这15个问题
- 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第3天
- tomcat编码配置gbk_tomcat编码乱码问题
- ajaxForm和ajaxSubmit实现form的ajax提交的方法
- 利用detours实现API劫持
- Civil3D绘制路线
- STM32 ADC工作原理
- CentOS 5和6的启动流程
- 论文阅读:Retrieval-augmented Generation across Heterogeneous Knowledge
- Nginx之URL重写
- 毕业设计:电子/通信/物联网/计算机专业选题目参考(嵌入式linux/单片机STM32/web/图像)
- 计算机无法自动排列,为什么我的电脑不能自动排列图标
- 第5章第27节:如何录制幻灯片的演示过程 [PowerPoint精美幻灯片实战教程]
- Lucene 2.2.0发布自带的HTMLParser的使用
- niginx参数配置详解(转)