深度優先搜尋之迷宮問題
思路:確保在該點應該做什麼,要做什麼條件判斷
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),和樹的先序
深度優先搜尋dfs之1到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