城市地图
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; } }