-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathP081.py
More file actions
66 lines (57 loc) · 1.86 KB
/
P081.py
File metadata and controls
66 lines (57 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# -*- coding: utf-8 -*-
#==============================================================================
# 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.
#==============================================================================
import numpy as np
# Define function to import data files obtained from machine
def readfile(filename):
# Open the file
openfile = open(filename, 'rb')
# CSV reader, comma seperated, keeping second column only
lines = [line.strip().split(",") for line in openfile]
Trig = []
for line in lines:
data = []
for item in line:
data.append(int(item))
Trig.append(data)
return Trig
Matrix = readfile('P081matrix.txt')
M = np.array(Matrix)
# S is a matrix of size M which will contain the cheapest cost to get
# to the finish from that square.
# eg [1 5; 2, 0] would give [3 5; 2 0]. As we can see from (0,0) cheapest
# is to travel through the 2 rather than the 5, thus 2+1 =3
S = np.zeros(np.shape(M), dtype='int32')
iio, jjo = np.shape(M)
ii = iio-1
while ii>=0:
jj = jjo-1
while jj>=0:
print ii, jj
if (ii==iio-1) and (jj==jjo-1):
S[ii,jj] = M[ii,jj]
elif ii==iio-1:
S[ii,jj] = M[ii,jj] + S[ii,jj+1]
elif jj==jjo-1:
S[ii,jj] = M[ii,jj] + S[ii+1,jj]
else:
S[ii,jj] = M[ii,jj] + min([S[ii+1,jj], S[ii,jj+1]])
jj -= 1
ii -= 1
print S[0,0]
#427337