【POJ - 3126】Prime Path(bfs)
生活随笔
收集整理的這篇文章主要介紹了
【POJ - 3126】Prime Path(bfs)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題干:
給你兩個(gè)四位的素?cái)?shù)a,b。
a可以改變某一位上的數(shù)字變成c,但只有當(dāng)c也是四位的素?cái)?shù)時(shí)才能進(jìn)行這種改變。
請(qǐng)你計(jì)算a最少經(jīng)過(guò)多少次上述變換才能變成b。
例如:1033 -> 8179?
1033?
1733?
3733?
3739?
3779?
8779?
8179
最少變換了6次。
Input
第一行輸入整數(shù)T,表示樣例數(shù)。 (T <= 100)?
每個(gè)樣例輸入兩個(gè)四位的素?cái)?shù)a,b。(沒(méi)有前導(dǎo)零)?
Output
對(duì)于每個(gè)樣例,輸出最少變換次數(shù),如果無(wú)法變換成b則輸出"Impossible"。
Sample Input
3 1033 8179 1373 8017 1033 1033Sample Output
6 7 0解題報(bào)告:
? 期末復(fù)習(xí)前最后一水題,博客停更。
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?
總結(jié)
以上是生活随笔為你收集整理的【POJ - 3126】Prime Path(bfs)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 继茅台后,A股市场再迎“千元股”,历史上
- 下一篇: 办信用卡去银行面签 网络申请都要面签