【BFS】POJ 3126 Prime Path
2017-05-19 09:53
337 查看
Problem Description
输入T组数据,每组数据对应两个千位的素数,要你操作左边的素数变成右边的素数最少的变换(只能改变一个数字,而且变换成的数一定得是素数)次数。
代码:需要注意的点就是,个位数肯定不能是偶数,千位数肯定不能是0
输入T组数据,每组数据对应两个千位的素数,要你操作左边的素数变成右边的素数最少的变换(只能改变一个数字,而且变换成的数一定得是素数)次数。
代码:需要注意的点就是,个位数肯定不能是偶数,千位数肯定不能是0
#include<cstdio> #include<cstring> #include<queue> using namespace std; queue<int> q; int v; int vis[100000]; int judge(int x)//判断这个千位数是不是素数 { int i; for(i = 2; i * i <= x; i++) { if(x % i == 0) break; } if(i * i > x) return 1; else return 0; } void BFS(int u) { int i; while(!q.empty()) q.pop();//初始化 memset(vis, 0, sizeof(vis)); q.push(u);//入队列 vis[u] = 1; int t, x, y; while(!q.empty()) { t = q.front(); q.pop(); if(t == v) { printf("%d\n", vis[t] - 1); return ; } for(i = 0; i < 10; i++)//个位 { if(i % 2 != 0) { x = t / 10; x = x * 10 + i; if(judge(x) && !vis[x])//如果满足 { vis[x] = vis[t] + 1;//变换次数+1 q.push(x);//入队列 } } } for(i = 0; i < 10; i++)//十位 { y = t % 10; x = t / 100; x = (x * 10 + i) * 10 + y; if(judge(x) && !vis[x]) { vis[x] = vis[t] + 1; q.push(x); } } for(i = 0; i < 10; i++)//百位 { y = t % 100; x = t / 1000; x = (x * 10 + i) * 100 + y; if(judge(x) && !vis[x]) { vis[x] = vis[t] + 1; q.push(x); } } for(i = 1; i < 10; i++)//千位 { y = t % 1000; x = i * 1000 + y; if(judge(x) && !vis[x]) { vis[x] = vis[t] + 1; q.push(x); } } } } int main() { int T, u; scanf("%d", &T); while(T--) { scanf("%d %d", &u, &v); BFS(u); } }
相关文章推荐
- [bfs]poj 3126 Prime Path
- POJ 3126 BFS-Prime Path
- 广搜 BFS POJ 3126 Prime Path
- Prime Path (poj 3126 bfs)
- #BFS# POJ 3126 Prime Path
- POJ - 3126 Prime Path(BFS, 素数筛法)
- POJ 3126 Prime Path bfs 简单
- POJ 3126-Prime Path(BFS-素数变换一位)
- BFS-POJ-3126-Prime Path
- POJ 3126 Prime Path 解题报告(BFS & 双向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 BFS
- poj 3126 Prime Path(bfs搜索)
- BFS POJ 3126 Prime Path