• POJ3126 Prime Path(BFS)


    题目链接

    AC代码如下:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <string>
    #include <queue>
    #include <algorithm>
    #include <map>
    #include <ctype.h>
    
    using namespace std;
    
    const int maxn = 10000;
    
    struct node {
        int x, s;
    };
    
    int end;
    bool vis[maxn], prime[maxn];
    
    int BFS(int s) {
        
        if(s == end) return 0;
        
        queue<node> Q;
        memset(vis, 0, sizeof(vis));
    
        vis[s] = true;
        Q.push((node){s, 0});
    
        while(!Q.empty()) {
          node e = Q.front(); Q.pop();
          for(int i=1; i<=1000; i *= 10) {
              for(int j=0; j<10; j++) {
                if(i == 1000 && j == 0) continue;
                int t = e.x%i+j*i+e.x/(i*10)*(i*10);
                if(t == end) return e.s+1;
                if(prime[t]) {
                    if(vis[t]) continue;
                    vis[t] = true;
                    Q.push((node){t, e.s+1});
                }
              }
          }  
        }
        return -1;
    }
        
    
    int main() {
        int T, s;
        scanf("%d", &T);
    
        memset(prime, true, sizeof(prime));
        prime[0] = prime[1] = false;
    
        for(int i=2; i*i<maxn; i++) {
          if(prime[i])
            for(int j=i*i; j<maxn; j += i) {
                prime[j] = false;
            }
        }
    
        
        while(T--) {
          scanf("%d%d", &s, &end);
          printf("%d
    ", BFS(s));
        }
    
        return 0;
    }
        
  • 相关阅读:
    7.15 更改累计和中的值
    7.10 计算中间值
    7.11 求总和的百分比
    7.9 计算模式
    7.8 计算累计差
    7.4 求一个表的行数
    7.6 生成累计和
    7.7 生成累积乘积
    7.2 求某列中的最小、最大值
    7.3 对某列的值求和
  • 原文地址:https://www.cnblogs.com/tanhehe/p/3271297.html
Copyright © 2020-2023  润新知