城市地图

package Graph;

import java.util.Scanner;

/**
 * 城市地图,图的深度优先算法的实现
 * @author Administrator
 *
 */

public class Main6 {

	private static int min = 999999;
	private static int book[];
	private static int n;
	private static int e[][];
	private static int m;
	private static int a;
	private static int b;
	private static int c;
	
	
	
	
	
	
	public static void main(String[] args) {

		
		book = new int[101];
		e = new int [101][101];
		for(int i = 0;i<book.length;i++){
			book[i] = 0;
			for(int j = 0;j<e[i].length;j++){
				e[i][j] = 0;
			}
		}
		
		
		Scanner input = new Scanner(System.in);
		n = input.nextInt();
		m = input.nextInt();
		//初始化二维矩阵
		for(int i = 1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(i == j){
					e[i][j] = 0;
				}else{
					e[i][j] = 99999999;
				}
			}
		}
		//读入城市之间的道路
		for(int i=1;i<=m;i++)
		{
			a = input.nextInt();
			b = input.nextInt();
			c = input.nextInt();
			e[a][b] = c;
			
		}
		//从1号城市出发
		book[1] = 1;//标记1号城市已经在路径中
		dfs(1,0);//1表示当前所在的城市编号,0表示当前已经走过的路程
		System.out.printf("%d",min);
		
		
		
		
		
		
		
		
		
		
		
		
	}





	//cur是当前所在的城市编号,distance是当前已经走过的路程

	private static void dfs(int cur, int distance) {
		int j;
		//如果当前走过的路程已经大于之前找到的最短的路程,则没有必要再往下尝试了,立即返回
		if(distance > min)
		{
			return ;
		}
		//判断是不是已经到达了目标城市
		if(cur == n)
		{
			if(distance < min){
				min = distance;//更新最小值
			}
			return ;
		}
		//从1号城市到n号城市依次尝试
		for(j = 1;j<=n;j++)
		{
			//判断当前城市cur到城市j是否有路,并判断城市j是否已经走过的路径中
			if(e[cur][j] != 99999999 && book[j] == 0)
			{
				book[j] = 1;//标记城市j已经在路径中
				dfs(j,distance+e[cur][j]);//从城市j出发,继续寻找目标城市
				book[j] = 0;//之前一步探索完毕之后,取消对城市j的标记
				
				
			}
		}
		return;
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
	}
	
}

  

posted on 2015-04-03 14:46  aicpcode  阅读(226)  评论(0编辑  收藏  举报

导航