• 深搜


    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]]);
    			}
    		}
    	}
    }
    
    深搜代码,万变不离其宗。
  • 相关阅读:
    CXX解析CSV文件
    linux通过cifs挂载windows共享目录
    oracle生产环境存储过程调试方案
    imp导入库表空间找不到问题记录
    银行怎么盘头寸
    jQuery插件之【jqGrid】常用语法整理-【更新】
    Jquery一些笔记
    request对象的五个集合
    jQuery插件之【jqGrid】常用语法整理-【更新】
    MVC中几种常用ActionResult
  • 原文地址:https://www.cnblogs.com/asd529735325/p/10216043.html
Copyright © 2020-2023  润新知