1. 程式人生 > >深度優先搜尋之迷宮問題

深度優先搜尋之迷宮問題

思路:確保在該點應該做什麼,要做什麼條件判斷

import copy
#[0,0] ->[0,1]  x+0 y+1
map_list = [
    [0,0,0,0,0],
    [0,0,1,0,0],
    [0,0,0,1,0],
    [0,0,1,0,1],
    [0,1,0,2,0],
    [0,0,0,0,0],
    [0,1,1,0,0]
]
min = 99999
x, y = 0, 0#起始位置
#四個方向
next = [[0,1],[1,0],[0,-1],[-1,0]]#分別為右下左上     0,0
#標記已經走過的位置
book_list = []
#結果集
#將當前座標和已走步數傳進去
def dfs(x=0,y=0,step=0):
    global min,result
    #是否到終點??
    if map_list[x][y] == 2:
        # 確保result是最短的那條路
        if step<min:
            min = step
            #由於此時最後一點還沒加入到列表,所以....
            book_list.append((x, y))
            result = copy.deepcopy(book_list)
            book_list.remove((x, y))
        #已經到達,不需要繼續往下走
        return
    for i in range(4):#迴圈四次,依次嘗試四個方向
        book_list.append((x, y))
        #y代表x軸
        ty = y + next[i][1]
        #x代表的時y軸
        tx = x + next[i][0]
        #tx 1  ty 0
        #判斷該點是否可走,即是不是越界或者障礙物
        if 0<=tx<=6 and 0<=ty<=4 and (tx,ty) not in book_list:
            if  map_list[tx][ty] !=1:
                dfs(tx,ty,step+1)
            #將本次嘗試移出
        book_list.remove((x,y))
if __name__ == '__main__':
    dfs()
    print(result)

相關推薦

深度優先搜尋迷宮問題

思路:確保在該點應該做什麼,要做什麼條件判斷 import copy #[0,0] ->[0,1] x+0 y+1 map_list = [ [0,0,0,0,0], [0,0,1,0,0], [0,0,0,1,0], [0,0,1,

unity 使用深度優先搜尋生成迷宮

    unity 使用深度優先搜尋生成迷宮之二 之前寫過一篇使用深度優先搜尋生成隨機迷宮的文章 https://www.cnblogs.com/JinT-Hwang/p/9599913.html 今天做了一下優化,使用unity的TileMap來做,並且程式碼減少到100行以內

day21 Python 實現的深度優先搜尋實現迷宮演算法

  # Python 實現的深度優先搜尋實現迷宮演算法 lookup_path = [] history_path = [] # maze = [[0, 0, 1, 0, 1], [1, 0, 0, 0, 1], [0, 0, 1, 1, 0], [0, 1, 0, 0, 0], [0

day21 Go 實現的深度優先搜尋實現迷宮演算法

  # Go 實現的深度優先搜尋實現迷宮演算法 package main import ( "errors" "fmt" "os" ) // 讀取檔案中的資料,使用迴圈生成迷宮圖 func readMazeFile(filename string) [][]int

深度優先搜尋城堡問題

#include<iostream> #include<stack> #include<cstring> #include<algorithm> using namespace std; int R, C; int rooms[60][60];

C語言廣度優先搜尋迷宮(佇列)

變數 head 和 tail 是隊頭和隊尾指標, head 總是指向隊頭, tail 總是指向隊尾的下一個元素。每個點的 predecessor 成員也是一個指標,指向它的前趨在 queue 陣列中的位置。如下圖所示: 廣度優先是一種步步為營的策略,每次都從各個方向探索一

深度優先搜尋組合和全排列

深度優先搜尋 俗語:一條路走到黑,走不通回頭 廢話不說,上程式碼!!! const int n=10,k=3; int a[]={0,1,2,3,4,5,6,7,8,9,10}; //第一個數

深度優先搜尋迷宮 java實現

題目如下 :    本題我採用深度優先搜尋的方式解決,建立一個二維的int型別陣列,定義其中的1代表起點,2代表可以走的地方,3代表不可以走的地方,4代表終點,其中由於在搜尋的時候有上下左右四個方向,為了防止做判斷的時候報ArrayIndexOfBoundsException

演算法總結深度優先搜尋

1 組合搜尋問題 子集 http://www.lintcode.com/zh-cn/problem/subsets/ 帶重複元素的子集 http://www.lintcode.com/zh-cn/problem/subsets-ii/ 數字組合 http://www

黑白迷宮問題——深度優先搜尋演算法

2021年,九月,小w發現自己位於一個巨大的由黑格和白格組成的n行m列的迷宮中。 小w只能從白格走到黑格或從黑格走到白格, 小w找到了ljf,她想知道自己從每一個格子出發不回頭可以走多少個格子。 但是ljf忙於在ioi中虐場,把問題留給了你。 注意:原題是可以回頭,屬於連通圖問題

圖的遍歷 深度優先搜尋和廣度優先搜尋

1. 深度優先搜尋介紹 圖的深度優先搜尋(Depth First Search),和樹的先序遍歷比較類似。 它的思想:假設初始狀態是圖中所有頂點均未被訪問,則從某個頂點v出發,首先訪問該頂點,然後依次從它的各個未被訪問的鄰接點出發深度優先搜尋遍歷圖,直至圖中所有和v有

普機場深度優先搜尋(待補)

P1219 八皇后 13.2K通過 29.5K提交 題目提供者 評測方式雲端評測 標籤USACO高效能 難度普及/提高- 時空限制1000ms / 128MB  提交  題解    提示:收藏到任務計劃後,可在首頁檢視。 最新討論顯示 推薦的相關題

深度優先搜尋_數獨遊戲

1. 問題描述: 你一定聽說過“數獨”遊戲。 如下圖所示,玩家需要根據9×9盤面上的已知數字,推理出所有剩餘空格的數字,並滿足每一行、每一列、每一個同色九宮內的數字均含1-9,不重複。 數獨的答案都是唯一的,所以,多個解也稱為無解。 本圖的數字據說是芬蘭數學家花了3個月的時

【轉載】圖的遍歷 深度優先搜尋和廣度優先搜尋

【轉載】圖的遍歷之 深度優先搜尋和廣度優先搜尋 原文地址:https://www.cnblogs.com/skywang12345/p/3711483.html 深度優先搜尋的圖文介紹 1. 深度優先搜尋介紹 圖的深度優先搜尋(Depth First Search),和樹的先序

深度優先搜尋dfs1到n的全排列(收藏)

/******** *給你一個數n,輸出1到n的全排列 *深度優先搜尋 ********/#include <stdio.h>#include <stdlib.h>int book[10], a[10], n;  void dfs(int step) 

演算法研究解決全排列問題:使用深度優先搜尋(DFS)

解決全排列問題:使用深度優先搜尋(DFS) 深度優先搜尋(Depth FIrst Search, DFS),著眼於當下該如何做,至於下一步的做法則和當前的做法是一樣的。可以藉助這種思想來解決全排列問題。 定義全排列問題:輸入一個大於1的整數n,輸出1~n

面試題常見演算法圖的廣度優先搜尋深度優先搜尋

類似於二叉樹的廣度優先搜尋和深度優先搜尋,程式碼如下: void DFS(Node root) //非遞迴實現 { stack<Node> s; root.

圖的遍歷 深度優先搜尋和廣度優先搜尋(圖文講解)

深度優先搜尋的圖文介紹 1. 深度優先搜尋介紹 圖的深度優先搜尋(Depth First Search),和樹的先序遍歷比較類似。 它的思想:假設初始狀態是圖中所有頂點均未被訪問,則從某個頂點v出發,首先訪問該頂點,然後依次從它的各個未被訪問的鄰接點出發

深度優先搜尋:能否走出迷宮

題目 一個m×n的迷宮裡有很多鐳射,用其起點和終點座標(x1,y1,x2,y2)來表示。有鐳射的地方不能通過。當起點為(0,0),終點為(m,n),且移動只能為上下左右各一個單位,問能否從起點到達終點。輸入包括m和n,接著是鐳射的個數,每個鐳射的使用4個座標表

實現深度優先搜尋DFS(以迷宮解救為例子)

演算法描述:給定開始點座標(x,y) 和終點座標(p,q),在一個二維數組裡面,其中1代表障礙物,0則沒有。求開始到終點的最短距離。 程式碼如下: MIN = 9999999 a = [[0