poj 3126
基本上可以說是做的第一道bfs題,稍微有點感覺了
//============================================================================ // Name : 3126.cpp // Author : // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //============================================================================#include <iostream> #include <cstdio> #include <queue> #include <cstring> using namespace std;int ans[10000]; queue <int> q; bool visit[10000], prime[10000]; int N, a, b;int bfs(int m, int n){while(!q.empty()) q.pop();memset(ans, 0, sizeof(ans));q.push(m);visit[m] = true;int p;if(visit[n]) return ans[n];while(!q.empty()){p = q.front();q.pop();for(int i = 0;i <= 9;i++){if(prime[p/10*10 + i]&&!visit[p/10*10 + i]){q.push(p/10*10 + i);ans[p/10*10 + i] = ans[p]+1;visit[p/10*10 + i] = true;}if(prime[p/100*100+p%10+i*10]&&!visit[p/100*100+p%10+i*10]){q.push(p/100*100+p%10+i*10);ans[p/100*100+p%10+i*10] = ans[p]+1;visit[p/100*100+p%10+i*10] = true;}if(prime[p/1000*1000+p%100+i*100]&&!visit[p/1000*1000+p%100+i*100]){q.push(p/1000*1000+p%100+i*100);ans[p/1000*1000+p%100+i*100] = ans[p]+1;;visit[p/1000*1000+p%100+i*100] = true;}if(i!=0&&prime[p%1000+i*1000]&&!visit[p%1000+i*1000]){q.push(p%1000+i*1000);ans[p%1000+i*1000] = ans[p]+1;visit[p%1000+i*1000] = true;}}if(visit[n]){return ans[n];}} }int main() {freopen("a.txt", "r", stdin);memset(prime, true, sizeof(prime));prime[1] = false;for(int i = 2;i <= 9999/2;i++){if(prime[i]){for(int j = i<<1;j <= 9999;j+=i){prime[j] = false;}}}scanf("%d", &N);while(N--){scanf("%d%d",&a, &b);memset(visit, false, sizeof(visit));printf("%d\n", bfs(a, b));}return 0; }
轉載于:https://www.cnblogs.com/ACKOKO/articles/2078488.html
總結
- 上一篇: Visual C++ 2011-5-27
- 下一篇: 用过的游标