最小路径和
2016-09-10 10:54
134 查看
题目:
给定一个矩阵,从左上角开始每次只能向右或向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和。
输入两个数x和y,用空格隔开,表示矩阵的行和列;接下来的x行分别都输入y个数,用空格隔开。
如:
思路:
代码:
测试:
给定一个矩阵,从左上角开始每次只能向右或向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和。
输入两个数x和y,用空格隔开,表示矩阵的行和列;接下来的x行分别都输入y个数,用空格隔开。
如:
3 3 1 3 5 8 1 3 5 0 6 最短路径为1==>3==>1==>0==>6,输出为最短路径和,即1+3+1+0+6=11
思路:
用一个新数组用来存放每个点上的路径和。 第一行中,每个点上的最小路径和即为前面所有路径的和+当前路径; 第一列中,每个点上的最小路径和即为上方所有路径的和+当前路径; 其他位置上的最小路径和为上方路径和+当前路径或左方路径和+当前路径。 如上面的输入示例,新数组应该为: 1 4 9 9 5 8 14 5 11
代码:
import java.util.Scanner; public class MinPath { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); while(scanner.hasNext()){ int x = scanner.nextInt(); int y = scanner.nextInt(); int[][] initializeArr = new int[x][y]; for(int i=0;i<x;i++){ for(int j=0;j<y;j++){ initializeArr[i][j] = scanner.nextInt(); } } int[][] newArr = new int[x][y]; newArr[0][0] = initializeArr[0][0]; for(int i=1;i<x;i++){ for(int j=1;j<y;j++){ newArr[0][j] = initializeArr[0][j]+newArr[0][j-1]; newArr[i][0] = initializeArr[i][0]+newArr[i-1][0]; newArr[i][j] = Math.min(newArr[i][j-1],newArr[i-1][j])+initializeArr[i][j]; } } System.out.println(newArr[x-1][y-1]); } } }
测试:
输入: 3 3 1 3 5 8 1 3 5 0 6 输出: 11
相关文章推荐
- hdu 1151 Air Raid(最小路径覆盖)
- 网络流3最小路径覆盖问题
- 线性规划与网络流24题 3最小路径覆盖问题 NEFU 481
- 最小路径覆盖
- POJ 2060 最小覆盖路径
- 最小生成树与最短路径的区别以及实现方法
- Taxi Cab Scheme———最小路径覆盖
- hdu 1151 Air Raid DaG 图的最小路径覆盖
- 最小路径覆盖问题 2011-12-29
- hdu1151+poj2594(最小路径覆盖)
- 动态规划实例(六):最小花费路径
- 26、图算法-最小生成树、最短路径
- 最小路径覆盖(二分图)
- cogs 728. [网络流24题] 最小路径覆盖问题
- poj_1422_最小路径覆盖
- hdu1350Taxi Cab Scheme (最小路径覆盖)
- 网络流24题之最小路径覆盖问题(nefu481)
- poj1422-最小路径覆盖(不交叉)&二分图-Air Raid
- 最小路径覆盖问题(网24题,二)
- poj 1422 Air Raid(最小不相交路径覆盖)