|
发表于 2018-2-21 21:03:27
|
显示全部楼层
- import shuzimigong as sh
- t = sh.t.split('\n')
- s = [[] for i in range(80)]
- for i in range(80):
- for each in t[i].split(','):
- s[i].append(int(each))
- right = {(0,0):s[0][0]}
- right1 = {}
- t = [(-1,0),(1,0),(0,1),(0,-1)]
- def move():
- count = s[0][0]
- a = 0
- b = 0
- while True:
- if a == 79 and b == 79:
- break
- if a == 79 and b != 79:
- count += s[a][b+1]
- b += 1
- elif a != 79 and b == 79:
- count += s[a+1][b]
- a += 1
- else:
- count += min(s[a+1][b],s[a][b+1])
- if s[a+1][b] <= s[a][b+1]:
- a += 1
- else:
- b += 1
- print(count)
- return count
- def go(a,b,c,count):
- q = [(a,b,c)]
- while len(q) != 0:
- (a,b,c) = q.pop(0)
-
- for i in t:
- a1 = a + i[0]
- b1 = b + i[1]
- if 0<=a1<80 and 0<=b1<80:
- c1 = c + s[a1][b1]
-
- if c1 <count:
- if (a1,b1) == (79,79):
- print(c1)
- return c1
- if (a1,b1) not in right:
-
- q.append((a1,b1,c1))
- right[(a1,b1)] = c1
- if (a1,b1) in right:
- if c1 < right[a1,b1]:
- if (a1,b1,right[(a1,b1)]) in q:
- q.remove((a1,b1,right[(a1,b1)]))
-
- right[(a1,b1)] = c1
- right1[(a1,b1)] = (a,b)
- q.append((a1,b1,c1))
-
-
-
- def main():
- global right
- global right1
- count = move()
-
- while True:
- a = 0
- b = 0
- c = s[0][0]
- right = {(0,0):s[0][0]}
- right1 = {}
- t = go(a,b,c,count)
- if t != None:
- count = t
- else:
- print(count)
-
- break
- main()
复制代码
|
|