zoukankan      html  css  js  c++  java
  • poj 3126

    一道搜索的水题,其实搜索相对其他的来说好掌握一点,因为有个固定的模板可以用去套

    题目大意就是数字的变化,一个数字只可以变化到它最相邻的一个素数上去,意思是只变化一位数字,求最短的变化方案

    #include <iostream>
    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <queue>
    
    bool mark [10001];
    
    int s[10001],step[10001],ans;
    
    
    using namespace std;
    
    queue<int >q;
    
    int bfs(int x)
    {
        int head,c[4],y,i;
        if(x==ans)
        {
            printf("0
    ");
            return 0;
        }
        while(!q.empty())
            q.pop();
        q.push(x);
        mark[x]=false;
        while(!q.empty())
        {
            head=q.front();
            q.pop();
            c[0]=head/1000;
            c[1]=(head-c[0]*1000)/100;
            c[2]=(head-c[0]*1000-c[1]*100)/10;
            c[3]=head%10;
            for(i=0;i<=9;i++)
            {
                if(i!=0)
                {
                    y=1000*i+c[1]*100+c[2]*10+c[3];
                    if(s[y]&&mark[y]){q.push(y);mark[y]=false;step[y]=step[head]+1;}
                }
                y=c[0]*1000+100*i+c[2]*10+c[3];
                if(s[y]&&mark[y]){q.push(y);mark[y]=false;step[y]=step[head]+1;}
                y=c[0]*1000+c[1]*100+i*10+c[3];
                if(s[y]&&mark[y]){q.push(y);mark[y]=false;step[y]=step[head]+1;}
                y=c[0]*1000+c[1]*100+c[2]*10+i;
                if(s[y]&&mark[y]){q.push(y);mark[y]=false;step[y]=step[head]+1;}
            }
            if(head==ans) printf("%d
    ",step[head]);
        }
        return 0;
    }
    int main()
    {
        int i,n,first;
        memset(s,0,sizeof(s));
        for(i=1000;i<=10000;i++)
            for(int j=2;j<=sqrt(i)+1;j++)
            {
                if(i%j==0) break;
                if(j==int(sqrt(i))) s[i]=1;
            }
        scanf("%d",&n);
        while(n)
        {
            n--;
            memset(mark,true,sizeof(mark));
            memset(step,0,sizeof(step));
            scanf("%d%d",&first,&ans);
            bfs(first);
        }
        return 0;
    }
    
    
  • 相关阅读:
    别让删库这种事情再发生
    别让删库这种事情再发生
    oracle目录结构
    oracle 查看启动时间和运行时间
    oracle 执行计划(连接类型)
    oralce执行计划(三)
    跟踪索引是否有用
    AIX系统之启动
    oracle查看核心进程
    oracle执行计划(二)
  • 原文地址:https://www.cnblogs.com/Tree-dream/p/5401478.html
Copyright © 2011-2022 走看看