离散作业判断是否是汉密尔顿图汉密尔顿回路求解

package z_hamiltion;

import java.util.Scanner;

//import hamiltion.findhamiltion;

class gethamiltion{
	
static	int  visit[] = new int[100]; //节点访问记录
	static int loop[] = new int[100];//汉密尔顿回路记录
		static	Boolean check=false;
		static int cnt = 0; 
		Boolean quickcheck(int matrixs[][],int v) //此方法判断是否是完全图,如果是完全图,则不用递归直接结束。
		{
			Boolean check = true;
			for(int i = 1;i<=v;i++)
			{
				for(int j =1;j<=v;j++)
				{
					if(matrixs[i][j]!=1)
					{
						check = false;
						return check;
					}
				}
			}
			return check;
		}
	Boolean dfshamiltion(int matrixs[][],int start,int length,int v)  //dfs深度优先搜索判断是否是汉密尔顿图,loop[]存汉密尔顿路
	{
		int i;
		if(length == v&&matrixs[start][1]==1)
		{
			loop[length+1] = start;
			check = true;
		//System.out.println("start:"+start);
		//	System.out.println("length:"+length);
		//	System.out.println("cnt:"+cnt);
		}
		for( i = 1;i<=v; i++)
		{
			if(matrixs[start][i] == 1&&visit[i]==0&&start!=i)
			{	
				visit[start] = 1;
				length ++;
				loop[length] = start;
				dfshamiltion(matrixs,i,length,v);
				visit[start] = 0;
				length--;
			}
			else if(start!=1&&matrixs[start][i]==0&&visit[i]==0)
			{
				//length ++;
				cnt ++;
			}
		}
		return check;
	}
}

public class hamiltion {
	public static void main(String args[])
	{
		  int v;
		  int [][]matrixs;
		  matrixs = new int[200][200];                    //输入为二维邻接矩阵
		  Scanner cin = new Scanner(System.in);
		  v = cin.nextInt(); 
		  for(int i  = 0;i<=v;i++)
		  {
			
			  for(int j =0;j<=v;j++)
			  {  if(i==0&&j==0)
				  continue;
			  else   
			  matrixs[i][j] = cin.nextInt();
			  }
		  }
		 gethamiltion  h = new gethamiltion();
		  Boolean  p ;
		Boolean q =  h.quickcheck(matrixs, v);
		if(q == true)
		{
			System.out.println("此图是汉密尔顿图!");
			System.out.println("其中一个汉密尔顿回路为:");
			{
				for(int i=1;i<=v;i++)
				{

					  if(i==1) {
						  System.out.print(i);
						  continue;
					  }
				  System.out.print("->"+i);
				  }
				System.out.println("->"+1);
				}
		}
		else
		{ 
			p =  h.dfshamiltion(matrixs, 1, 1,v);
		  if(p==true)
		  {
			  System.out.println("此图是汉密尔顿图!");
		  }
		 
		int i;
		System.out.println("汉密尔顿回路如下:");
		  for(i=2;i<=v+1;i++)
		  {
			  if(i==2) {
				  System.out.print(h.loop[i]);
				  continue;
			  }
		  System.out.print("->"+h.loop[i]);
		  }
		  System.out.println("->"+1);
}	
		} 	
}


你可能感兴趣的:(java个人入门学习)