Path sum: two ways

In the 5 by 5 matrix below, the minimal path sum from the top left to the bottom right, by only moving to the right and down, is indicated in bold red and is equal to 2427.

         
131 673 234 103 18
201 96 342 965 150
630 803 746 422 111
537 699 497 121 956
805 732 524 37 331

Find the minimal path sum, in matrix.txt (right click and “Save Link/Target As…”), a 31K text file containing a 80 by 80 matrix, from the top left to the bottom right by only moving right and down.


路径和:两个方向

在如下的5乘5矩阵中,从左上方到右下方始终只向右或向下移动的最小路径和为2427,由标注红色的路径给出。

         
131 673 234 103 18
201 96 342 965 150
630 803 746 422 111
537 699 497 121 956
805 732 524 37 331

在这个31K的文本文件matrix.txt(右击并选择“目标另存为……”)中包含了一个80乘80的矩阵,求出从该矩阵的左上方到右下方始终只向右和向下移动的最小路径和。

解题

这个题目很简单的

对第0列和第0行的数直接向下加

第0列:data[i][0] = data[i][0] + data[i-1][0]  for i in 1:row - 1

第0行: data[0][i] = data[0][i] + data[0][i-1] for i in 1:col-1

其他情况

for i in 1:row -1

for j in 1:col-1

data[i][j] = data[i][j] + min(data[i-1][j],data[i][j-1])

最后元素data[row-1][col-1]就是最小路径的值。

Python

import time ;
import numpy as np def run():
filename = 'E:/java/projecteuler/src/Level3/p081_matrix.txt'
data = readData(filename)
Path_Sum(data) def Path_Sum(data):
row,col = np.shape(data)
for i in range(1,row):
data[0][i] = data[0][i]+data[0][i-1]
data[i][0] = data[i][0] + data[i-1][0]
for i in range(1,row):
for j in range(1,col):
data[i][j] += min(data[i-1][j],data[i][j-1])
print data[row-1][col-1] def readData(filename):
fl = open(filename)
data =[]
for row in fl:
row = row.split(',')
line = [int(i) for i in row]
data.append(line)
return data
if __name__=='__main__':
t0 = time.time()
run()
t1 = time.time()
print "running time=",(t1-t0),"s" #
# running time= 0.00799989700317 s

参考博客中的读取文件,这个读取文件的思想很好的,自己对于读取文件还不是很熟悉

上个Python程序是按照左上到右下走的

下面java的是按照右下向左上走的

package Level3;

import java.awt.List;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList; public class PE081{ static int[][] grid;
static void run() throws IOException{
String filename = "src/Level3/p081_matrix.txt";
String lineString = "";
ArrayList<String> listData = new ArrayList<String>();
BufferedReader data = new BufferedReader(new FileReader(filename));
while((lineString = data.readLine())!= null){
listData.add(lineString);
}
// 分配大小空间的 定义的grid 没有定义大小
assignArray(listData.size());
// 按照行添加到数组grid中
for(int index = 0,row_counter=0;index <=listData.size() - 1;++index,row_counter++){
populateArray(listData.get(index),row_counter);
}
System.out.println(Path_min(grid)); }
public static int Path_min(int[][] data){
int size = data.length;
for(int i=size -2;i>=0;--i){
data[i][size-1] += data[i+1][size-1];
data[size-1][i] += data[size-1][i+1];
}
for( int index = size -2;index >=0;index--){
for(int innerIndex = size -2;innerIndex >=0;innerIndex--){
data[index][innerIndex] += Math.min(data[index+1][innerIndex],
data[index][innerIndex+1]);
}
}
return data[0][0];
}
// 每行的数据添加到数组中
public static void populateArray(String str,int row){
int counter = 0;
String[] data = str.split(",");
for(int index = 0;index<=data.length -1;++index){
grid[row][counter++] = Integer.parseInt(data[index]);
}
}
public static void assignArray(int no_of_row){
grid = new int[no_of_row][no_of_row];
} public static void main(String[] args) throws IOException{
long t0 = System.currentTimeMillis();
run();
long t1 = System.currentTimeMillis();
long t = t1 - t0;
System.out.println("running time="+t/1000+"s"+t%1000+"ms");
// 427337
// running time=0s38ms
}
}

Project Euler 81:Path sum: two ways 路径和:两个方向的更多相关文章

  1. Project Euler 83:Path sum: four ways 路径和:4个方向

    Path sum: four ways NOTE: This problem is a significantly more challenging version of Problem 81. In ...

  2. Project Euler 82:Path sum: three ways 路径和:3个方向

    Path sum: three ways NOTE: This problem is a more challenging version of Problem 81. The minimal pat ...

  3. Leetcode 931. Minimum falling path sum 最小下降路径和(动态规划)

    Leetcode 931. Minimum falling path sum 最小下降路径和(动态规划) 题目描述 已知一个正方形二维数组A,我们想找到一条最小下降路径的和 所谓下降路径是指,从一行到 ...

  4. 【LeetCode-面试算法经典-Java实现】【064-Minimum Path Sum(最小路径和)】

    [064-Minimum Path Sum(最小路径和)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a m x n grid filled with ...

  5. [LeetCode] Path Sum II 二叉树路径之和之二

    Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...

  6. [LeetCode] Path Sum 二叉树的路径和

    Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...

  7. [LeetCode] Binary Tree Maximum Path Sum(最大路径和)

    Given a binary tree, find the maximum path sum. The path may start and end at any node in the tree. ...

  8. [LeetCode] 113. Path Sum II 二叉树路径之和之二

    Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...

  9. [LeetCode] 112. Path Sum 二叉树的路径和

    Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...

随机推荐

  1. Tomcat启动超时

    当启动tomcat时候出现 Server Tomcat v8.0 Server at localhost was unable to start within 45 seconds. If the s ...

  2. silverlight 画图InkPresenter

    <UserControl x:Class="SilverlightTest.PolygonTest" xmlns="http://schemas.microsoft ...

  3. openerp学习笔记 自定义小数精度(小数位数)

    小数位数标识定义: lx_purchase/data/lx_purchase_data.xml <?xml version="1.0" encoding="utf- ...

  4. SetTimeOut jquery的作用

    1. SetTimeOut() 1.1 SetTimeOut()语法例子 1.2 用SetTimeOut()执行Function 1.3 SetTimeOut()语法例子 1.4 设定条件使SetTi ...

  5. java项目中读取src目录下的文件

    private void getUser(String tmpfile){ Properties props = new Properties(); props.load(DbTask.class.g ...

  6. XenServer安装虚拟机---先扩容存放ISO镜像文件

    我们都知道xenserver安装后,不管你的盘有多大,只有4G的空间. 故操作是:新建LV卷,可自定义大小 1.vgdisplay #先查看剩余空间 [root@XenServer /]# vgdis ...

  7. php服务器探针

    <?php /* ---------------------------------------------------- */ /* 程序名称: PHP探针-Yahei /* 程序功能: 探测 ...

  8. phpcms v9后台登陆验证码无法显示,怎么取消验证码

    phpcms v9后台登陆验证码无法显示论坛里关于这个问题貌似一直没有解决,查看源代码后发现,关键一点是获取验证码的图片与全局变量SITE_URL相关,也就是网站的目录, 所以只要修改cache/co ...

  9. 怎么删除有外键约束的MySQL表中的数据

    SET FOREIGN_KEY_CHECKS = 0 操作结束后 SET FOREIGN_KEY_CHECKS = 1

  10. Careercup - Google面试题 - 5205167846719488

    2014-05-03 23:35 题目链接 原题: For a given node in binary search tree find a next largest number in searc ...