zoukankan      html  css  js  c++  java
  • 深搜

    package DFS;
    
    import java.util.Scanner;
    
    public class SearchMethodDFS {
    	static Scanner sc=new Scanner(System.in);
    	public static void main(String[] args) {
    		while(sc.hasNext()){
    			int n=sc.nextInt();
    			int a[]=new int [n];          //开数组内存
    			int color[]=new int [n];      //设颜色,-1代表没有访问过,1代表访问过
    			int parents[]=new int [n];    //用来记录父节点,把父节点放在其中
    			for(int i=0;i<a.length;i++){   //初始化值
    				a[i]=i+1;
    				color[i]=-1; 
    				parents[i]=-1;
    			}  
    			int startNode=0;         //表示开始节点
    			int count=0;              //计数,如果满a.length则表示已经把所以值遍历完了
    			dfs(a,color,parents,startNode,count);   //进行深搜,以下深搜用的递归,注:深搜用递归,广搜用队列
    		}
    	}
    	private static void dfs(int[] a, int[] color, int[] parents, int v,int count) {
    		count++;             //每次进去使count+1
    		color[v]=1;          //记录该节点已经被访问过,1表示访问过,-1表示没有访问过
    		if(count==a.length && isprime(a[v]+a[0])){     //当满足条件的时候输出结果值 ,注:此处必须判断最后一个数与第一个数即a[0]的和是不是素数
    			//System.out.println(a[v]);
    			parents[0]=v;    
    			print(a, parents);
    		}
    		for(int i=1;i<a.length;i++){			//查找满足条件(相邻节点与之相加是素数的节点)
    			if(isprime(a[v]+a[i])&&color[i]==-1){
    				parents[i]=v;        //把满足条件的节点位置赋给父节点
    				dfs(a, color, parents, i, count);   //开始递归
    				color[i]=-1;         //注:此处必须把其他节点返回成-1,因为每进一次那些节点都会变1,所以要变回来,不然没法继续   
    				parents[i]=-1;
    			}
    		}
    		
    	}
    	private static boolean isprime(int i) {    //判断是不是素数的方法
    		if(i==2){
    			return true;
    		}
    		for(int j=2;j*j<=i;j++){
    			if(i%j==0){
    				return false;
    			}
    		}
    		return true;
    	}
    	private static void print(int a[],int parents[]){     //打印的方法
    		int index[]=new int [parents.length];
    		int p=0;
    		for(int i=0;i<parents.length;i++){
    			index[parents.length-i-1]=parents[p];
    			p=parents[p];
    		}
    		for(int j=0;j<index.length;j++){
    			if(j<index.length-1){
    				System.out.print(a[index[j]]+" ");
    			}else{
    				System.out.println(a[index[j]]);
    			}
    		}
    	}
    }
    
    深搜代码,万变不离其宗。
  • 相关阅读:
    MFC/HALCON混合编程系列三_CFielDialog打开文件对话框
    MFC/HALCON混合编程系列二_打开两幅图_MFC布局_
    MFC/HALCON混合编程系列一_相机打开图像_简单处理_
    MFC C++ Cstring与string互转
    ImageMagik——开发篇(转)
    二维码解码器Zbar+VS2010开发环境配置(使用opencv库)
    select @@Identity 返回自动递增字段的值
    WebStorm设置左侧菜单栏背景和字体设置
    Chrome插件推荐
    WebStorm常用快捷键
  • 原文地址:https://www.cnblogs.com/asd529735325/p/10216043.html
Copyright © 2011-2022 走看看