锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
姹備笂鍥?鐐瑰埌鍏朵粬鍚勭偣鐨勬渶鐭礬寰勶紝渚濇嵁鍥捐鐭ヨ瘑寤虹珛鐭╅樀妯″瀷錛岃繘涓姝ュ緱鍒頒唬鐮佸涓?br />
public class ShortPathA {
private static int[][]
a = {
{0, 50, 10, 100000, 45, 100000}, {100000, 0, 15, 100000, 10, 100000}, {20, 100000, 0, 15, 100000, 100000}, {
100000, 20, 100000, 0, 35, 100000}, {100000, 100000, 1000000, 30, 0, 100000}, {100000, 100000, 100000, 3, 100000, 0}
};
private static boolean[] mark = new boolean[a.length];
public ShortPathA() {
int Vo = 0; //婧愮偣
//婧愮偣鍒板叾浠栧悇鐐圭殑璺濈
int[] b = new int[a.length];
DynArrayInt S = new DynArrayInt();
for (int i = 0; i < a.length; i++) {
mark[i] = false;
//b[i] = a[Vo][i];
}
int best = -1;
mark[0] = true;
b[0] = 0; //{0涓烘簮鐐箎
while (best != 0) {
best = 0;
int best_j = 0;
for (int i = 0; i < b.length; i++)
{
if (mark[i]) //{瀵規瘡涓涓凡璁$畻鍑烘渶鐭礬寰勭殑鐐箎
{
for (int j = 0; j < b.length; j++) {
if ( (!mark[j]) && (a[i][j] > 0)) {
if ( (best == 0) || (b[i] + a[i][j] < best)) {
best = b[i] + a[i][j];
best_j = j;
}
}
}
}
}
if (best > 0) {
b[best_j] = best;
mark[best_j] = true;
}
}
System.out.println(java.util.Arrays.toString(b));
}
public static void main(String[] args) {
ShortPathA shortpath = new ShortPathA();
}
}
聽聽聽 private static int[][]
聽聽聽聽聽聽聽聽聽聽聽 links = { {0,1,1,0,0,0,1,0}, {1,0,0,1,0,0,0,1}, {1,0,0,1,1,1,0,0},
聽聽聽聽聽聽聽聽聽聽聽 {0,1,1,0,1,1,0,0}, {0,0,1,1,0,1,1,0}, {0,0,1,1,1,0,0,1}, {1,0,0,0,1,0,0,0}, {0,1,0,0,0,1,0,0}
聽聽聽 };
聽聽聽 public OnePath() {
聽聽聽聽聽聽聽 int sum = 0;
聽聽聽聽聽聽聽 //瀛樻斁姣忎釜鐐圭殑搴?br />聽聽聽聽聽聽聽 int[] point = new int[links[0].length];
聽聽聽聽聽聽聽 for (int i = 0; i < links[0].length; i++) {
聽聽聽聽聽聽聽聽聽聽聽 int[] templink = links[i];
聽聽聽聽聽聽聽聽聽聽聽 for (int j = 0; j < links[0].length; j++) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 point[i] += templink[j];
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽 sum += point[i];
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 //璁$畻搴︽暟鏄鏁扮偣鐨勪釜鏁?濡傛灉澶т簬2鍒欎笉鑳戒竴絎旂敾
聽聽聽聽聽聽聽 int odt = 0;
聽聽聽聽聽聽聽 int start = -1;
聽聽聽聽聽聽聽 for (int i = 0; i < point.length; i++) {
聽聽聽聽聽聽聽聽聽聽聽 int mod = point[i] % 2;
聽聽聽聽聽聽聽聽聽聽聽 if (mod > 0) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //if(start==-1)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 start = i;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 odt++;
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 if(odt>2)
聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽 System.out.println("璇ュ浘涓嶈兘涓絎旂敾");
聽聽聽聽聽聽聽聽聽 return;
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 int r = 0;
聽聽聽聽聽聽聽 //浠庝竴涓鏁扮偣寮濮嬭綆?br />聽聽聽聽聽聽聽 int nowd=start;
聽聽聽聽聽聽聽 System.out.print(nowd+1);
聽聽聽聽聽聽聽 while (sum > 0) {
聽聽聽聽聽聽聽聽聽聽聽 r=0;
聽聽聽聽聽聽聽聽聽聽聽 //瀵逛簬璧風偣nowd 媯鏌ュ綋鍓嶇殑鐐箁 鏄惁鍚堥?br />聽聽聽聽聽聽聽聽聽聽聽 //links[nowd][r]==0 鍒ゆ柇鏄惁鏈夊彲浠ヨ蛋鐨勬病鏈夌敤榪囩殑綰胯礬
聽聽聽聽聽聽聽聽聽聽聽 //(point[r]<=1 && sum!=2) 鍒ゆ柇鏄惁鏄渶鍚庝竴嬈★紝濡傛灉涓嶆槸鏈鍚庝竴嬈★紝閭d箞閬垮紑搴︽暟鏄?鐨勭偣
聽聽聽聽聽聽聽聽聽聽聽 while (links[nowd][r]==0 || (point[r]<=1 && sum!=2)) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 r++;
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽 links[nowd][r]=0; //宸茬粡鐢ㄨ繃鐨勭嚎璺?br />聽聽聽聽聽聽聽聽聽聽聽 links[r][nowd]=0; //宸茬粡鐢ㄨ繃鐨勭嚎璺?links[nowd][r] links[r][nowd]浜掍負寰榪旇礬綰?鐢ㄨ繃1->2閭d箞2->1涔熶綔搴熶簡
聽聽聽聽聽聽聽聽聽聽聽 sum=sum-2; //鎬誨害鏁板噺2 鍥犱負浠?->2 娑堣椾簡1鐨勫害鍜?鐨勫害
聽聽聽聽聽聽聽聽聽聽聽 point[nowd]--; //璧風偣鍜岀粓鐐圭殑搴﹂兘鍑? 1->2 閭d箞1鐨勫害鍜?鐨勫害閮藉噺1
聽聽聽聽聽聽聽聽聽聽聽 point[r]--; //璧風偣鍜岀粓鐐圭殑搴﹂兘鍑? 1->2 閭d箞1鐨勫害鍜?鐨勫害閮藉噺1
聽聽聽聽聽聽聽聽聽聽聽 nowd =r; //璁劇疆鏂扮殑璧風偣
聽聽聽聽聽聽聽聽聽聽聽 System.out.print("->"+(r+1));
聽聽聽聽聽聽聽 }
聽聽聽 }
聽聽聽 public static void main(String[] args) {
聽聽聽聽聽聽聽 new OnePath();
聽聽聽 }
}