zoukankan      html  css  js  c++  java
  • POJ 3126

    BFS+剪枝

    #include <stdio.h>
    #include <memory.h>
    int prime[10000];
    int st,fin;
    void Prime()
    {
    	int i,j;
    	for(i=2;i<10000;i++)
    	{
    		if(!prime[i])
    		{
    			for( j=i+i;j<10000;j+=i)
    			{
    				prime[j]=1;
    			}
    		}
    	}
    }
    int getvalue(int a[])
    {
    	int m=0;
    	for(int i=3;i>=0;i--)
    	{
    		m=m*10+a[i];
    	}
    	return m;
    }
    int bfs(int st,int fin)
    {
    	int visit[10000]={0};
    	int q[10000];
    
    	int dis[10000]={0};
    
    	int font=0;
    	int rear=0;
    	q[rear++]=st;
    	dis[font]=0;
    	while(font<rear)
    	{
    		int w=q[font];
    		int m=w;
    		if(w==fin) return dis[w];
    		int num[4];
    		int i;
    		for(i=0;i<4;i++)
    		{
    			num[i]=w%10;
    			w=w/10;
    		}
    		
    		for(i=0;i<4;i++)
    		{
    			int j;
    			if(i==3) j=1;
    			else j=0;
    			int a=num[i];
    			for(;j<=9;j++)
    			{
    				if(j!=a){
    				num[i]=j;
    				int tem=getvalue(num);
    				if(!prime[tem]&&!visit[tem])
    				{
    					dis[tem]=dis[m
    						]+1;
    					visit[tem]=1;
    					q[rear++]=tem;
    				}
    				}
    		
    				num[i]=a;
    			}
    
    		}
    		font++;
    	}
    
    
    }
    int main()
    {
    	memset(prime,0,sizeof(prime));
        Prime();
    	int N;
    	scanf("%d",&N);
    	while(N--)
    	{
    		scanf("%d %d",&st,&fin);
    		printf("%d\n",bfs(st,fin));
    		
    	}
    	return 0;
    }


     

  • 相关阅读:
    搭建Keil C51开发环境
    源码分析之Handler
    Android中的算法
    Android中的数据结构
    高级UI-UI绘制流程
    高级UI-Path和PathMeasure
    高级UI-画板Canvas
    高级UI-滤镜和颜色通道
    高级UI-高级渲染
    高级UI-画笔Paint
  • 原文地址:https://www.cnblogs.com/lj030/p/3002328.html
Copyright © 2011-2022 走看看