zoukankan      html  css  js  c++  java
  • 实验吧 迷宫大逃亡

    0x01 题目介绍

    根据题目的说明,编写代码达到题目的要求。即可得到flag,一般flag格式是ctf{},所以在编写的代码,最终结果可能需要转码操作

    你掉进了一个连环迷宫, 这个连环迷宫总共有T个迷宫~

    每个迷宫有如下信息:
    迷宫大小n (表示这是n*n的迷宫)
    迷宫入口坐标
    迷宫出口坐标
    迷宫地图(由'X', 'O'组成的n行n列的迷宫,'X'表示障碍物, 即不可走,'O'表示可走的道路)

    如果能走出这个迷宫那么你将得到一个1,否则你将得到一个0
    这T个 0/1就是你走出这个连环迷宫的钥匙

    示例:
    T=2时:
    2
    3
    1 1
    1 3
    OXO
    OOO
    XXX

    3
    1 2
    3 3
    XOX
    OOX
    XXO

    那么钥匙为:10

    Hint: 

    这T个迷宫在in.txt文件里,这个文件第一行就是T, 接下来就是T个迷宫的信息

    key值:CTF{xxxx}

    0x02 分析

    看这别人的writeup写了好久才写出来.一道简单的ACM题把我难倒了.用python写的DFS算法才搞出来.最后看了人家写的代码只能流泪.

    0x03 代码

    import base64
    
    class mi_gong:
        def __init__(self,_len,_start,_end,_migong):
            self.len =_len  #迷宫的大小  n*n
            self.start =_start #开始点
            self.end = _end #终点  例:['3','5']
            self.migong = _migong #迷宫
            self.success = 0  #判断是否到达终点
            self.arrived = [] #已经访问的
    
        def run(self):
            return str(self.zou_migong())
    
        def zou_migong(self):
            self.DFS(self.start)
            # print(self.arrived)
            if self.success ==1:
                return 1
            return 0
    
        #位置+1
        def addx(self, x):
            x += 1
            if x >= self.len: return x - 1
            return x
        #位置-1
        def subx(self, x):
            x -= 1
            if x < 0: return x + 1
            return x
    
        #采用深度优先搜索
        def DFS(self,location):
            try:
                if self.migong[location[0]][location[1]] =="X" or location in  self.arrived:
                    return 0
                else:
                    self.arrived.append(location) #表示已访问过
                    if location == self.end:
                        self.success =1
                        return 0
                    #上下左右遍历
                    shang =[self.subx(location[0]),location[1]]
                    self.DFS(shang)
                    you =[location[0],self.addx(location[1])]
                    self.DFS(you)
                    xia =[self.addx(location[0]),location[1]]
                    self.DFS(xia)
                    zuo =[location[0],self.subx(location[1])]
                    self.DFS(zuo)
            except Exception as e:
                print(e)
    
    result ="" #最后的结果
    with open('ins.txt','r') as f:
        migong_num =int(f.readline().strip())  #迷宫的数量
    
        while(migong_num):
            m_len = int(f.readline().strip())
            start = [int(x)-1 for x in f.readline().split()]
            end = [int(x)-1 for x in f.readline().split()]
            #生成迷宫
            migong_list= []
            for i in range(m_len):
                migong_list.append(f.readline().strip())
            r =mi_gong(m_len,start,end,migong_list)
            result += str(r.run())
            migong_num -= 1
    f.close()
    print(result)
    ans =""
    for i in range(0,len(result),8):
        ans+=chr(int(result[i:i+8],2))
    print(ans)
    print(base64.b64decode(ans))
  • 相关阅读:
    【转】【SEE】基于SSE指令集的程序设计简介
    【转】【Asp.Net】asp.net服务器控件创建
    ControlTemplate in WPF ——ScrollBar
    ControlTemplate in WPF —— Menu
    ControlTemplate in WPF —— Expander
    ControlTemplate in WPF —— TreeView
    ControlTemplate in WPF —— ListBox
    ControlTemplate in WPF —— ComboBox
    ControlTemplate in WPF —— TextBox
    ControlTemplate in WPF —— RadioButton
  • 原文地址:https://www.cnblogs.com/Triomphe/p/9709266.html
Copyright © 2011-2022 走看看