zoukankan      html  css  js  c++  java
  • F

     1 #include <iostream>
     2 #include <queue>
     3 #include <cstdio>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 struct node{
     8     int cur, step;
     9 }now, Next;
    10 int vis[10001], star, finish, prime[10001] = { 0, 0, 1 };
    11 
    12 void init(){
    13     for (int i = 2; i < 10001; i++){
    14         if (!prime[i]){
    15             for (int j = 2; i*j < 10001; j++)
    16                 prime[i*j] = 1;
    17         }
    18     }
    19 }
    20 
    21 int bfs(){
    22     queue<node> Q;
    23     vis[star] = 1;
    24     now.cur = star, now.step = 0;
    25     Q.push(now);
    26     while (!Q.empty()){
    27         int i, j;
    28         char num[5];
    29         now = Q.front();
    30         Q.pop();
    31         if (now.cur == finish) return now.step;
    32         for (i = 0; i < 4; i++){
    33             sprintf(num, "%d", now.cur);
    34             for (j = 0; j < 10; j++){
    35                 if (j == 0 && i == 0)
    36                     continue;
    37                 if (i == 0)
    38                     Next.cur = j * 1000 + (num[1] - '0') * 100 + (num[2] - '0') * 10 + (num[3] - '0');
    39                 else if (i == 1)
    40                     Next.cur = j * 100 + (num[0] - '0') * 1000 + (num[2] - '0') * 10 + (num[3] - '0');
    41                 else if (i == 2)
    42                     Next.cur = j * 10 + (num[0] - '0') * 1000 + (num[1] - '0') * 100 + (num[3] - '0');
    43                 else if (i == 3)
    44                     Next.cur = j + (num[0] - '0') * 1000 + (num[1] - '0') * 100 + (num[2] - '0') * 10;
    45                 if (!prime[Next.cur] && !vis[Next.cur])
    46                 {
    47                     Next.step = now.step + 1;
    48                     vis[Next.cur] = 1;
    49                     Q.push(Next);
    50                 }
    51             }
    52         }
    53     }
    54     return -1;
    55 }
    56 
    57 int main(){
    58     int t, ans;
    59     cin >> t;
    60     init();
    61     while (t--){
    62         cin >> star >> finish;
    63         memset(vis, 0, sizeof(vis));
    64         ans = bfs();
    65         if (ans == -1) cout << "Impossible
    ";
    66         else cout << ans << endl;
    67     }
    68     return 0;
    69 }
  • 相关阅读:
    Linux笔记 三剑客之sed
    Linux笔记 用户组管理
    Linux实验之软件管理
    Linux实验之系统安装
    gd_t , bd_t 结构分析
    编辑linux内核与bosybox 时,make menuconfig 出现错误
    4412裸板开发 (1点灯)
    tiny4412SDK 1312B 启动ubuntuDsektop
    tiny4412 启动方式
    linux minitools+minicom 安装及使用
  • 原文地址:https://www.cnblogs.com/ouyang_wsgwz/p/8971074.html
Copyright © 2011-2022 走看看