package sort;
/*** 遊艇租賃最少費用計算:a點-b點,中途有1,2,3,4,5,6個停靠站點;每兩個站點有不同的收費,計算任意兩個站點最優方案及計算金額
* (1,2)-2¥,(1,3)-6¥,(1,4)-9¥,(1,5)-15¥,(1,6)-20¥
* (2,3)-3¥,(2,4)-5¥,(2,5)-11¥,(2,6)-18¥
* (3,4)-3¥,(3,5)-6¥,(6,6)-12¥
* (4,5)-5¥,(4,6)-8¥
* (5,6)-6¥
* 思路:假設i點到j點會在k點停靠是最優解,將路程分為(i,i+1,i+2,...,k),(k,k+1,...,j),即可以分為子串行,不斷的拆解子串行
* 最終會計算i和j相差2個站點,i和j相差3個站點,i和j相差4個站點的最優解之和
* 當i=j m[i][j]=0;
* 當j=i+1 m[i][j]=r[i][j],r[i][j]是兩個站點的票價
* 當j>i+1 m[i][j]=min(i-k-j的票價之和和,i-j的票價取最小值)
* 定義二維陣列:r[i][j]是各個站點之間票價,m[i][j]計算個點之間的最小費用,s[i][j]記錄兩點之間停靠的站點
* @author fengbin
*/public class minmoney }}
}}/*** 列印最短路線
* @param i
* @param j
*/public static void print(int i,int j)
print(i,s[i][j]);
print(s[i][j],j);
}/**
* 列印二維陣列
* @param arr
*/public static void printarr(int arr)
system.out.println();}}
public static void main(string args) ;
int index=0;
for (int i = 1; i }//初始各個站點
for (int i = 0; i < ms; i++)
if(j==0 && iprintarr(m);
rent();
system.out.println("s[i][j]記錄兩點之間停靠的站點:");
printarr(s);
system.out.println("花費的最少租金為:"+m[1][n]);
system.out.println("花費最少租金經過的站點:");
print(1,n);}}