安徽省赛

  1. 图一:
  2. 图二:
  3. 图三:
  • 我的代码:
  • 总结
  • 安徽省赛只有一个小时,我吐了,脚本都来不及写。。。。赛后才把flag搞出来

    呃,

    我其实也是第一次见这么庞大的迷宫,一共4384个格~~

    这里看见一行66

    zQvXfe.png

    代码逻辑很简单,这里不做过多介绍

    /我原先的脚本的思路是走到错的地方再返回,导致效率太低,跑了好久都没跑出来/

    赛后我还未想好该怎么优化我的深搜算法,所以就进行了一波手工画图。。。。。。。。

    图一:

    zQvwWQ.png

    图二:

    zQv7ex.png

    图三:

    zQvHw6.png

    emmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm

    然后就根据这个路线,手写路线字符串

    zQx9mt.png

    以上是我写的,本办法,太菜了,只能这么搞了


    ##下面贴上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

    ×

    喜欢就点赞,疼爱就打赏