POJ3126 Prime Path【数论】【BFS】
来源:互联网 发布:java 高性能服务器 编辑:程序博客网 时间:2024/06/07 03:23
题目链接:
http://poj.org/problem?id=3126
题目大意:
给你两个有四位数字的素数 A、B,问:每次只改变一个数字,且改变前后的数都是
素数,那么从 A 变到 B,最少需要多少次。
解题思路:
用 BFS 来做。判断素数用筛法求素数打表预处理一下,不过注意 1000 以下的数要
当非素数看待。
每次改变一位数字,并且如果改变后的数仍为素数的话入队,并用 cnt[] 来记录步数。
直到得到目标数的时候,返回结果。
AC代码:
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<queue>using namespace std;const int MAXN = 10100;bool Prime[MAXN];void IsPrime(){ Prime[0] = Prime[1] = false; for(int i = 2; i < MAXN; ++i) Prime[i] = true; for(int i = 2; i < MAXN; ++i) { if(Prime[i]) { for(int j = i+i; j < MAXN; j+=i) Prime[j] = false; } } for(int i = 2; i < 1000; ++i) Prime[i] = false;}bool vis[MAXN];int t[5],cnt[MAXN];int Bfs(int S,int T){ queue<int> q; memset(vis,false,sizeof(vis)); memset(cnt,0,sizeof(cnt)); q.push(S); vis[S] = true; while(!q.empty()) { int v = q.front(); q.pop(); //存取各个位上数字 t[0] = v/1000; t[1] = v/100%10; t[2] = v/10%10; t[3] = v%10; t[0]=v/1000;// printf("%d %d %d %d\n",t[0],t[1],t[2],t[3]); for(int j = 0; j < 4; ++j) { int temp = t[j]; //记录第 j 个数字 for(int i = 0; i <= 9; ++i) //将 t[j] 改变为 i { if(i != temp) { t[j] = i; int vtemp = t[0]*1000 + t[1]*100 + t[2]*10 + t[3]; if(!vis[vtemp] && Prime[vtemp]) { cnt[vtemp] = cnt[v] + 1; vis[vtemp] = true; q.push(vtemp); } if(vtemp == T) return cnt[vtemp]; } } t[j] = temp; //变回原本数字,继续改变另外数字 } if(v == T) return cnt[v]; } return -1;}int main(){ int T,A,B; IsPrime(); scanf("%d",&T); while(T--) { scanf("%d%d",&A,&B); int Ans = Bfs(A,B); if(Ans == -1) printf("Impossible\n"); else printf("%d\n",Ans); } return 0;}
1 0
- POJ3126 Prime Path【数论】【BFS】
- [POJ3126]Prime Path+BFS
- POJ3126 Prime Path(bfs)
- POJ3126 Prime Path(BFS)
- poj3126 prime path bfs
- bfs poj3126 Prime Path
- poj3126 Prime Path【bfs】
- BFS—POJ3126-Prime Path
- POJ3126--Prime Path(BFS)
- poj3126 Prime Path 简单BFS
- POJ3126 Prime Path 打表+BFS
- POJ3126 Prime Path 四维BFS
- poj3126——Prime Path(BFS)
- poj3126 Prime Path BFS深度优先搜索
- poj3126 Prime Path BFS深度优先搜索
- poj3126 Prime Path(BFS水)
- POJ3126 Prime Path(广搜BFS)
- POJ3126 Prime Path(素数判断+bfs)
- HDU 5521 Meeting (最短路)
- Python XML的解析与创建
- 从源码看Android】01从Looper说起
- Swift初始化(Initialization)
- 黑马程序员——字符串
- POJ3126 Prime Path【数论】【BFS】
- CodeForces 337C 找规律 ,等比数列求和
- JavaScript脚本引擎Rhino
- 四元数矩阵
- 关于获取设备内容的几种方式和区别
- 安装两次ORACLE客户端,PL-SQL登录报错 ORA-12154
- git简单使用方法
- switch的语法
- 四元数转欧拉角