• 1002: Prime Path


    题目链接:http://172.16.200.33/JudgeOnline/problem.php?id=1002

    题意:给你两个四位数的素数,求最少经过多少步的变化能够从一个素数变到另一个素数。在变得过程中,要求都是素数,而且每个新的数和原来的数只有一位不一样。

    思路:因为是四位的素数,所以先对素数打表,然后BFS,每次进入队列的是八个只有一个数字不同的四位数,并且还要是素数就入队

    #include <cstdio>
    #include <queue>
    #include <cmath>
    #include <cstring>
    #include <iostream>
    using namespace std;
    #define M  10000
    int prime[M];
     
    bool isprime(int x)   //素数打表
    {
      for(int i=2;i<=sqrt(x);i++)
      if(x%i==0) return false;
      return true;
    }
     
    void init()
    {
     for(int i=1001;i<=9999;i++)
     {
      if(isprime(i)) prime[i]=1;
      else prime[i]=0;
      }
    }
     
    int bfs(int a,int b)
    {
     queue<int>q;
     bool vis[M];
     int cout[M],t[4],temp;
     memset(vis,false,sizeof(vis));
     memset(cout,0,sizeof(cout));
     
     q.push(a);//入队
     vis[a]=true;
     
     while(!q.empty())//判断队列是否为空
     {
      int x=q.front();
      q.pop();
      t[0]=x/1000;
      t[1]=x/100%10;
      t[2]=x/10%10;
      t[3]=x%10;
     
      for(int j=0;j<4;j++)
      {
       int temp=t[j];
       for(int i=0;i<10;i++)
        if(i!=temp)
        {
         t[j]=i;
         int y=t[0]*1000+t[1]*100+t[2]*10+t[3];
         if(!vis[y]&&prime[y])
         {
          cout[y]=cout[x]+1;
          vis[y]=true;
          q.push(y);
         }
        if(y==b) return cout[y];
        }
       t[j]=temp;
      }
      if(x==b) return cout[x];
     }
     return -1;
    }
    int main()
    {
     init();
     int n,x,t,f;
     scanf("%d",&t);
     while(t--)
     {
       scanf("%d %d",&n,&x);
     
       f=bfs(n,x);
       if(f!=-1) printf("%d
    ",f);
       else      printf("Impossible
    ");
      }
     return 0;
    }
    View Code
  • 相关阅读:
    EXCEL中统计个数问题
    Boot Windows XP from a USB flash drive
    转:用VHD文件将Windows 7安装到虚拟磁盘
    CPU性能排名
    活动目录维护
    IE7占用CPU资源非常高
    不得不看:Windows Data Protection
    硬盘模式为UDMA 2.
    转载:NC6400安装Win7系统驱动列表及注意事项
    HP笔记本电池
  • 原文地址:https://www.cnblogs.com/www-cnxcy-com/p/5749944.html
Copyright © 2020-2023  润新知