搜尋 深度搜尋 廣度搜尋

2021-10-25 19:58:50 字數 1644 閱讀 3258

迷宮

題目描述

一天extense在森林裡探險的時候不小心走入了乙個迷宮,迷宮可以看成是由n * n的格點組成,每個格點只有2種狀態, . 和#, 前者表示可以通行後者表示不能通行。同時當extense處在某個格點時,他只能移動到東南西北(或者說上下左右)四個方向之一的相鄰格點上,extense想要從點a走到點b,問在不走出迷宮的情況下能不能辦到。如果起點或者終點有乙個不能通行(為#),則看成無法辦到。

輸入格式

第1行是測試資料的組數k,後面跟著k組輸入。每組測試資料的第1行是乙個正整數n (1 <= n <= 100),表示迷宮的規模是n * n的。接下來是乙個n * n的矩陣,矩陣中的元素為 . 或者 #。再接下來一行是4個整數ha, la, hb, lb,描述a處在第ha行, 第la列,b處在第hb行, 第lb列。注意到ha, la, hb, lb全部是從0開始計數的。

輸出格式

k行,每行輸出對應乙個輸入。能辦到則輸出「yes」,否則輸出「no」。

樣例輸入23

.##…#

#…0 0 2 25…

###.#

…#…###…

…#.0 0 4 0

樣例輸出

yesno

深度:

#include

#include

using

namespace std;

const

int max=

110;

char a[max]

[max]

;bool vis[max]

[max]

;int n,sx,sy,ex,ey;

void

dfs(

int x,

int y)

intmain()

}return0;

}

深度改良:

#include

#include

using

namespace std;

const

int max=

110;

char a[max]

[max]

;bool vis[max]

[max]

;int n,sx,sy,ex,ey;

int dx=

;int dy=

;void

dfs(

int x,

int y)

}int

main()

}return0;

}

廣度:

#include

#include

#include

using

namespace std;

const

int max=

110;

char a[max]

[max]

;int vis[max]

[max]

;int n,t,sx,sy,ex,ey;

struct pnt};

int dx=

;int dy=

;void

bfs()}

}}intmain()

}

深度搜尋和廣度搜尋

這篇部落格很早之前就寫好了,但是一直沒有發出來。在進行詳細解說之前,我們需要先借用圖的概念,圖就是由一些小圓點 稱為頂點 和連線這些小圓點的直線 稱為邊 組成的。如下圖是由5個頂點 1,2,3,4,5 和5 條邊 1 2,1 2,1 4,2 5,3 4 組成的。現在我們從一號頂點開始遍歷這個圖,使用...

廣度搜尋和深度搜尋

我現在要從 雙子峰 前往 金門大橋 求最短的路徑 帶單獨參構造方法 public placetree string p 帶全參的構造方法 public placetree placetree left,placetree right,string p public static void main ...

廣度優先搜尋 深度優先搜尋

前言 這幾天複習圖論演算法,覺得bfs和dfs挺重要的,而且應用比較多,故記錄一下。廣度優先搜尋 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。1.假設我們以頂點0為原點進行搜尋,首先確定鄰接0的頂點集合s0 2.然後確定頂點1的集合s1 頂點2沒有鄰...