解题思路:
这题20分白给啊!我前面一题就5分呜呜呜!!!
注意事项:
参考代码:
n=eval(input())
s=input()
temp=list(["0"]*201 for i in range(201))
result1,result2=[],[]
x0,y0=100,100
temp[x0][y0]=" " # 起点是空格 标记
result1.append(x0)
result2.append(y0)
for i in s:
if i=="U":
x0-=1
elif i=="L":
y0-=1
elif i=="D":
x0+=1
elif i=="R":
y0+=1
result1.append(x0)
result2.append(y0)
temp[x0][y0]=" "
# 确定矩阵
result1.sort()
result2.sort()
h1,h2=result1[0],result1[-1]
L1,L2=result2[0],result2[-1]
temp2=temp[h1-1:h2+2]
tt=[]
for i in temp2:
tt.append(i[L1-1:L2+2])
# 和BFS有点像
qu=[[0,1],[1,0],[0,-1],[-1,0]]
for i in range(len(tt)):
for j in range(len(tt[0])):
if tt[i][j]==" ":
for k in qu:
a,b=k
if 0<=i+a<len(tt) and 0<=j+b<len(tt[0]) and tt[i+a][j+b]=="0":
tt[i+a][j+b]="*"
# 剩余部分
for i in range(len(tt)):
for j in range(len(tt[0])):
if tt[i][j]=="0":
tt[i][j]=" "
# 最后排除一下
for i in range(len(tt)):
for j in range(len(tt[0])):
key=0
if tt[i][j]==" ":
for k in qu:
a,b=k
if 0<=i+a<len(tt) and 0<=j+b<len(tt[0]) and tt[i+a][j+b]=="*":
key+=1
if key==4:
tt[i][j]="*"
for i in tt:
print("".join(i))
def check(listx):
def bfs(queue):
for i in queue:
x,y=i
for j in qu:
a,b=j
if 0<=x+a<n and 0<=y+b<m and list1[x+a][y+b]!=1 and exist1[x+a][y+b]:
if m*(x+a)+y+b==z:
return 1
exist1[x+a][y+b]=0
queue.append([x+a,y+b])
xx,z,r=listx[1:]
x0,y0=xx//m,xx%m
list1[x0][y0]=1
x1,y1=r//m,r%m
exist1=list([1]*m for i in range(n))
exist1[x1][y1]=0
qu=[[0,1],[1,0],[0,-1],[-1,0]]
a=bfs([[x1,y1]])
list1[x0][y0]=0
if a:
return 1
return 0
def check2(nn):
list2=[0,m-1,(n-1)*m,(n-1)*m+m-1]
if nn in list2:
return 1
return 0
def check3(listx):
xx,zz=listx[:2]
listxx=[xx,zz]
listxx.sort()
aa,bb=listxx
for i in range(aa+1,bb):
x,y=i//m,i%m
if list1[x][y]:
return 0
return 1
def dfs(step):
if step-1==2 and check2(temp[2]):
return 1
if step-1==2:
if temp[1]//m != temp[2]//m and temp[1]%m != temp[2]%m:
return 1
if not check3(temp[1:]):
return 1
if step-1==3 and not check(temp):
return 1
if step-1==3:
print(temp[1:])
input()
result[0]+=1
return 1
for i in range(n*m):
if qq[i] and exist[i]:
exist[i]=0
temp[step]=i
step+=1
dfs(step)
step-=1
temp[step]=0
exist[i]=1
n,m=map(int,input().split())
list1=[]
for i in range(n):
list1.append(list(map(int,input().split())))
# qiang
qq=list(1 for i in range(n*m))
for i in range(n):
for j in range(m):
if list1[i][j]:
qq[m*i+j]=0
temp=list(0 for i in range(4))
exist=list( 1 for i in range(n*m))
result=[0]
dfs(1)
print(result[0])
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)scanf后面加个getchar(),收掉回车符,就可以用gets了浏览:1185 |
C语言训练-角谷猜想 (C++代码)(3N+1问题)浏览:1850 |
汽水瓶 (C语言代码)浏览:664 |
printf基础练习2 (C语言代码)浏览:605 |
C语言训练-立方和不等式 (C语言代码)浏览:779 |
【数组的距离】 (C语言代码)浏览:787 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:1327 |
蛇行矩阵 (C语言代码)浏览:792 |
WU-printf基础练习2 (C++代码)浏览:2061 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)from DQM浏览:773 |