Description
现有一形如下图的N*M
大小的迷宫:
SX...
.X.X.
.X.X.
...XD
'S'
表示出发点,'D'
表示目的地,'X'
表示墙,'.'
表示路。请你判断,是否可以用小于等于T
的步数走出迷宫。
Input
有多行输入,第一行三个用空格隔开的数N,M,T
,下面N
行,每行有M
个字符,表示迷宫,0 0 0
表示输入的终止。
Output
如果可以,输出'YES'
,否则输出'NO'
。
其余要求同首题。
Sample Input
4 5 12
SX...
.X.X.
.X.X.
...XD
4 5 13
SX...
.X.X.
.X.X.
...XD
0 0 0
Sample Output
NO
YES
Reference code
def bfs():
que=[[si,sj]]
while len(que):
p=que[0]
que.pop(0)
if p==[di,dj]:
return t[p[0]][p[1]]
for i in range(4):
[x,y]=[p[0]+dx[i],p[1]+dy[i]]
if 0<=x<N and 0<=y<M and v[x][y] and maze[x][y]!='X':
v[x][y]=0
que.append([x,y])
t[x][y]=t[p[0]][p[1]]+1
return T+1
while True:
N,M,T=(map(int,input().split()))
if N==0:
break
v=[[1 for i in range(M)] for j in range(N)]
t=[[0 for i in range(M)] for j in range(N)]
dx=[-1,0,1,0]
dy=[0,-1,0,1]
maze=[]
for i in range(N):
maze.append(input())
for i in range(N):
for j in range(M):
if maze[i][j]=='S':
si,sj=i,j
if maze[i][j]=='D':
di,dj=i,j
if abs(si-di)+abs(sj-dj)>T:
flag=False
else:
flag=(bfs()<=T)
if flag:
print('YES')
else:
print('NO')