def readMap():
m,n = [int(i) for i in stdin.readline().strip().split()]
#print >> stderr,n
enx,eny,exx,exy = [int(i) for i in stdin.readline().strip().split()]
matrix = []
for i in range(m):
matrix.append([int(j) for j in stdin.readline().strip().split()])
return matrix,m,n,enx,eny,exx,exy
def solveMaze(matrix,m,n,enx,eny,exx,exy):
def successor(i,j):
def inside(p,q):
if p < 0 or p >=m or q < 0 or q >= n:
return False
return True
ss = []
if inside(i + 1,j) and matrix[i + 1][j] != -1:
ss.append((matrix[i + 1][j],(i + 1,j)))
if inside(i ,j + 1) and matrix[i ][j + 1] != -1:
ss.append((matrix[i][j + 1],(i,j + 1)))
if inside(i - 1,j) and matrix[i - 1][j] != -1:
ss.append((matrix[i - 1][j],(i - 1,j)))
if inside(i ,j - 1) and matrix[i ][j -1] != -1:
ss.append((matrix[i][j - 1],(i,j - 1)))
return ss
visited = set()
fringe = []
heapq.heappush(fringe,(0,(matrix[enx][eny],(enx,eny))))
while fringe != []:
node = heapq.heappop(fringe)
nodeList = [node]
while fringe != [] and fringe[0][0] == node[0]:
nodeList.append(heapq.heappop(fringe))
Biggest = 0
bNode = None
for i in nodeList:
if i[1][0] > Biggest:
Biggest = i[1][0]
bNode = i
node = bNode
nodeList.remove(bNode)
for j in nodeList:
heapq.heappush(fringe,j)
if node[1][1] == (exx,exy):
#print node
power = node[1][0]
return str(power)
if node[1][1] not in visited:
#print node
visited.add(node[1][1])
for j in successor(*node[1][1]):
#print j[1]
heapq.heappush(fringe,(node[0] + 1 ,(node[1][0] + j[0],j[1])))
return "Mission Impossible."
#---------------------------------------------
from sys import stdin,stdout,stderr
import heapq
import sets
case = int(stdin.readline())
n = 1
while n <= case:
matrix,m,np,enx,eny,exx,exy = readMap()
#print matrix
#print >>stderr,n
stdout.write("Case #%d: " % n)
stdout.write(solveMaze(matrix,m,np,enx,eny,exx,exy) + "\n")
n += 1
Dragon Maze,python
最新推荐文章于 2024-05-29 20:28:59 发布