安徽省赛只有一个小时,我吐了,脚本都来不及写。。。。赛后才把flag搞出来
呃,
我其实也是第一次见这么庞大的迷宫,一共4384个格~~
这里看见一行66
代码逻辑很简单,这里不做过多介绍
/我原先的脚本的思路是走到错的地方再返回,导致效率太低,跑了好久都没跑出来/
赛后我还未想好该怎么优化我的深搜算法,所以就进行了一波手工画图。。。。。。。。
图一:
图二:
图三:
emmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
然后就根据这个路线,手写路线字符串
以上是我写的,本办法,太菜了,只能这么搞了
##下面贴上EDI团队的脚本
map = []
data =[map[i*66:i*66+66] for i in range(66)]
print(data)
usedmap = [[0 for i in range(len(data))] for i in range(len(data)) ]
flag=""
def DFS(x,y):
global flag
if x == 64 and y == 65:
print(flag)
if data[x+1][y] == 0 and usedmap [x+1][y] == 0:
usedmap [x][y] = 1
flag += 's'
DFS(x+1,y)
flag = flag[:-1]
usedmap [x][y] = 0
if data[x-1][y] == 0 and usedmap [x-1][y] == 0:
usedmap [x][y] = 1
flag += 'w'
DFS(x-1,y)
flag = flag[:-1]
usedmap [x][y] = 0
if data[x][y+1] == 0 and usedmap [x][y+1] == 0:
usedmap [x][y] = 1
flag += 'd'
DFS(x,y+1)
flag = flag[:-1]
usedmap [x][y] = 0
if data[x][y-1] == 0 and usedmap [x][y-1] == 0:
usedmap [x][y] = 1
flag += 'a'
DFS(x,y-1)
flag = flag[:-1]
usedmap [x][y] = 0
y=0
x=1
try:
DFS(x,y)
except:
pass
他们的脚本其实就是只走对的位置,我实在没想到居然效率会快这么多!!!!!!!!!
后来我参照他们的思路,重新优化了一下我的脚本,可以说在他们的基础上在一次优化了程序的效率
只能说算法实在太重要了!!!!!!!!!!!!!!
我的代码:
def dfs(v6, v7):
global flag
if len(flag) > 364: # 这里防止深度过深
return
if v6 == 64 and v7 == 65:
print(flag)
tlag[66 * v6 + v7] = 1 # 标记走过了
if map1[66 * v6 + v7 + 1] == 0 and tlag[66 * v6 + v7+1] == 0: # 这个位置能不能走,有没有走过
flag += 'd'
dfs(v6, v7 + 1)
flag = flag[:-1]
if map1[66 * (v6+1) + v7] == 0 and tlag[66 * (v6+1) + v7] == 0:
flag += 's'
dfs(v6+1,v7)
flag = flag[:-1]
if map1[66 * (v6-1) + v7] == 0 and tlag[66 * (v6-1) + v7] == 0:
flag += 'w'
dfs(v6-1, v7)
flag = flag[:-1]
if map1[66 * (v6) + v7 - 1] == 0 and tlag[66 * (v6) + v7-1] == 0:
flag += 'a'
dfs(v6, v7 - 1)
flag = flag[:-1]
# 这里不用将标志去掉,因为这个位置所有方向都走过了都没到终点,那么其他位置到达该位置也无法到达终点,所以懂吧?
if __name__ == "__main__":
map1 = []
tlag = [0]*len(map1)
flag = ""
try:
dfs(1, 0)
except:
pass
至于代码的细节这里直接看注释即可,都已经写好了
总结
这里个人的算法功底还有待提升,算法还是要多练,不然明明会做,但是现场做不出来,太难受了!!!
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com