001 迷宮問題

2021-10-05 07:29:18 字數 1674 閱讀 1696

描述

定義乙個二維陣列:

int maze[5]

[5]=

;

它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。

輸入乙個5 × 5的二維陣列,表示乙個迷宮。資料保證有唯一解。

輸出左上角到右下角的最短路徑,格式如樣例所示。

樣例輸入

010

0001

0100

0000

0111

0000

10

樣例輸出

(0,

0)(1

,0)(

2,0)

(2,1

)(2,

2)(2

,3)(

2,4)

(3,4

)(4,

4)

簡單的bfs,主要難點是儲存路徑,因此需要模擬佇列。

#include

#include

using

namespace std;

const

int n =

100;

int matrix[n]

[n];

//記錄迷宮

struct path

//無參建構函式

path

(int _r,

int _c,

int _f):r

(_r),c

(_c),f

(_f)

//有參建構函式};

bool vis[n]

[n]=

;//記錄點是否已經加入,每個點只能加入一次

int head =

0,tail =1;

//因為要儲存路徑,所以元素不能出列,因此要模擬佇列 。用頭尾兩個指標就好了。

int dis[4]

[2]=

,,,}

;//按四個方向拓展

path queue[n]

;//佇列

void

init()

//初始化

void

print_1

(int head)

//列印答案。先用陣列儲存,然後反向輸出

;int i =1;

ans[0]

= head;

while

(queue[head]

.f !=-1

)for

(int j = i-

1; j>=0;

--j)

printf

("(%d, %d)\n"

,queue[ans[j]

].r,queue[ans[j]

].c);}

void

print_2

(int head)

//遞迴輸出,看起來高大上了

void

bfs(

int x,

int y)

else}}

} head++

;//這裡要注意,每次頭指標都要後移}}

intmain()

問題 A 迷宮求解問題

時間限制 10 sec 記憶體限制 2048 mb 提交 574 解決 306 提交 狀態 討論版 用乙個m n的矩陣表示迷宮,0和1分別表示迷宮中的通路和障礙。設計乙個程式,對給定的迷宮,求出找到的第一條從入口到出口的通路,或得到沒有通路的結論。我們指定 1 迷宮的入口為矩陣的左上角 1,1 迷宮...

迷宮問題求解(1) 簡單迷宮

標頭檔案 include include include include include maze.h define max 100 typedef struct position datatype typedef struct stack stack void stackinit stack s ...

迷宮問題1

c 語言程式設計練習1 程式設計練習 編寫程式尋找迷宮路徑。入口 x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 出口x 圖1讀取迷宮檔案 如圖1所示 不限於此迷宮 以入口為開始 出口為終點 程式設計尋找一條穿越迷宮的路...