【POJ - 3126】Prime Path(bfs)
生活随笔
收集整理的這篇文章主要介紹了
【POJ - 3126】Prime Path(bfs)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題干:
給你兩個四位的素數a,b。
a可以改變某一位上的數字變成c,但只有當c也是四位的素數時才能進行這種改變。
請你計算a最少經過多少次上述變換才能變成b。
例如:1033 -> 8179?
1033?
1733?
3733?
3739?
3779?
8779?
8179
最少變換了6次。
Input
第一行輸入整數T,表示樣例數。 (T <= 100)?
每個樣例輸入兩個四位的素數a,b。(沒有前導零)?
Output
對于每個樣例,輸出最少變換次數,如果無法變換成b則輸出"Impossible"。
Sample Input
3 1033 8179 1373 8017 1033 1033Sample Output
6 7 0解題報告:
? 期末復習前最后一水題,博客停更。
AC代碼:
#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define F first #define S second #define ll long long #define pb push_back #define pm make_pair using namespace std; typedef pair<int,int> PII; const int MAX = 2e4 + 5; int a[5],tmp[5]; bool vis[MAX]; bool is[MAX]; void prime() {memset(is,1,sizeof is);is[1]=is[0]=1;for(int i = 2; i<=20000; i++) {if(is[i] == 0) continue;for(int j = i+i; j<=20000; j+=i) is[j] = 0;} } void get(int x) {int p = 0;while(x) {a[++p] = x%10;x/=10;} } int go() {int res = 0 ;for(int i = 4; i>=1; i--) {res = res * 10 + tmp[i];}return res; } void init() {for(int i = 1; i<=4; i++) tmp[i] = a[i]; } struct Node {int val,t;Node(int val=0,int t=0):val(val),t(t){} }; int bfs(int st,int ed) {queue<Node> q;q.push(Node(st,0));while(q.size()) {Node cur = q.front();q.pop();get(cur.val);if(cur.val == ed) return cur.t;init();for(int i = 0; i<=9; i++) {tmp[1] = i;if(is[go()] && vis[go()] == 0) {vis[go()] = 1;q.push(Node(go(),cur.t + 1));} }init();for(int i = 0; i<=9; i++) {tmp[2] = i;if(is[go()] && vis[go()] == 0) {vis[go()] = 1;q.push(Node(go(),cur.t + 1));} }init();for(int i = 0; i<=9; i++) {tmp[3] = i;if(is[go()] && vis[go()] == 0) {vis[go()] = 1;q.push(Node(go(),cur.t + 1));} }init();for(int i = 1; i<=9; i++) {tmp[4] = i;if(is[go()] && vis[go()] == 0) {vis[go()] = 1;q.push(Node(go(),cur.t + 1));} }}return -1; } int main() {prime();int t,x,y;cin>>t;while(t--) {memset(vis,0,sizeof vis);cin>>x>>y;printf("%d\n",bfs(x,y));}return 0 ; } //20:55-21:07?
總結
以上是生活随笔為你收集整理的【POJ - 3126】Prime Path(bfs)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 继茅台后,A股市场再迎“千元股”,历史上
- 下一篇: 办信用卡去银行面签 网络申请都要面签