Poj 3126 Prime Path

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Poj 3126 Prime Path相关的知识,希望对你有一定的参考价值。

技术分享
 1 #include <iostream>
 2 #include <queue>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <string>
 6 #define CLR(arr) memset(arr,0,sizeof(arr))
 7 #define N 10005
 8 using namespace std;
 9 string s, e;
10 bool vis[N];
11 bool prime[N];
12 struct node
13 {
14     string num;
15     int    s;
16 };
17 void inti(){
18     int n = sqrt(N)+1;
19     prime[1] = true;
20     for (int i = 2; i < n; i++){
21         for (int j = 2*i; j < N; j += i){
22             prime[j] = true;
23         }
24     }
25 }
26 int bfs(){
27     queue<node> q;
28     node p = {s,0}, t;
29     q.push(p);
30     vis[(s[0] - 0) * 1000 + (s[1] - 0) * 100 + (s[2] - 0) * 10 + s[3] - 0] = true;
31     while (!q.empty()){
32         p = q.front(); q.pop();
33         if (p.num == e)return p.s;
34         for (int i = 0,pow=1000; i < 4; i++,pow/=10){
35             int cur = (p.num[0] - 0)*1000 + (p.num[1] - 0)*100 +
36                 (p.num[2] - 0)*10 +(p.num[3] - 0) - (p.num[i] - 0)*pow;
37             for (char c = i==0?1:0; c <= 9; c++){
38                 
39                 if (p.num[i] != c&&vis[cur+pow*(c-0)]==false&&prime[cur+pow*(c-0)]==false){
40                     vis[cur + pow*(c - 0)] = true;
41                     t.num = p.num; t.num[i] = c;
42                     t.s = p.s + 1;
43                     q.push(t);
44                     //cout <<‘#‘<< t.num << endl;
45                 }
46             }
47         }
48     }
49     return -1;
50 }
51 int main()
52 {
53     int n;
54     cin>>n;
55     inti();
56     while (n--){
57         cin >> s >> e;
58         int ans = bfs();
59         if (ans!=-1)printf("%d\n", ans);
60         else printf("Impossible\n");
61         CLR(vis);
62     }
63     return 0;
64 }
View Code

题目大意是给出两个四位素数,让你通过每次改变其中一位数的操作,来将a变成b,并且过程中所有的数都是无前导0的4为素数,(题面我真的吐槽不能啊,傲娇的prime一定要prime。。。。)

这题感觉和poj1426很像。也是通过某种操作得到一颗解答树,然后对其进行bfs。

用字符串(整数也可以,但我觉得实现起来比较麻烦)来保存数,并记录操作次数,来作为结点。此外,判断素数要打表,因为数据小,于是用了最简单的那种。复习了一下。

以上是关于Poj 3126 Prime Path的主要内容,如果未能解决你的问题,请参考以下文章

POJ 3126 Prime Path (BFS)

POJ3126:Prime Path

POJ 3126 Prime Path

POJ-3126 Prime Path

poj-3126 Prime Path

Prime Path POJ-3126