参照单源最短路径
/**
* 文件名:Main.java
*
* 版本信息:
* 日期:2013-6-27
* Copyright Corporation 2013
* 版权所有
*
*/
package 题目1008;
import java.util.Scanner;
/**
*
* 项目名称:arithmetic
* 类名称:Main
* 类描述:
* 创建人:黄传聪
* 创建时间:2013-6-27 下午3:51:03
* 修改人:黄传聪
* 修改时间:2013-6-27 下午3:51:03
* 修改备注:基本思路:建立两个二维数组,一组存储点到点之间的距离,另一组存储点到点之间的花费
* 单元最短路径为贪心策略
* @version
*
*/
public class Main {
public static void main(String[] args) {
int n; //the point num
int m; // the line count
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()){
n = scanner.nextInt();
m = scanner.nextInt();
if(n == 0 && m ==0 ){
break;
}
// 创建两个二维数组
int[][] length = new int[n+1][n+1];
int[][] value = new int[n+1][n+1];
int i,j;
// 将数组的元素置为0表示不可达,注意,自身到自身设置为不可到达
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
length[i][j] = 0;
value[i][j] = 0;
}
}
for(i=0;i<m;i++){
int a = scanner.nextInt();
int b = scanner.nextInt();
int c = scanner.nextInt();
int d = scanner.nextInt();
length[a][b] = c;
value[a][b] = d;
}
/*for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
System.out.print( " " + legth[i][j] );
}
System.out.println();
}*/
int min = 999999999;
int begin = scanner.nextInt();
int end = scanner.nextInt();
int[]result = new int[n+1]; //用于存放动态规划的最小路劲
for(i=0;i<n+1;i++){
result[i] = 0;
}
int k = 0;
if(length[begin][end] != 0){
min = length[begin][end];
}
for(i=begin;i<=end;i++){
for(j=1;j<=end;j++){
if(length[i][j] != 0 && length[i][j] < min){
result[k] = j;
}
}
k++;
}
int valueCount = 0;
int lengthCount = 0;
for(k=0;k<result.length;k++){
if(result[k] == 0){
break;
}else{
lengthCount += length[begin][result[k]];
valueCount += value[begin][result[k]];
begin = result[k];
}
}
System.out.println(lengthCount + " " + valueCount);
}
}
}
转载于:https://my.oschina.net/u/1011659/blog/140981