問題 A 迷宮求解問題

2021-09-27 12:40:47 字數 1919 閱讀 9032

時間限制: 10 sec 記憶體限制: 2048 mb

提交: 574 解決: 306

[提交][狀態][討論版]

用乙個m×n的矩陣表示迷宮,0和1分別表示迷宮中的通路和障礙。設計乙個程式,對給定的迷宮,求出找到的第一條從入口到出口的通路,或得到沒有通路的結論。

我們指定:

(1) 迷宮的入口為矩陣的左上角(1,1),迷宮的出口為右下角(m,n);

(2) 路徑的探索順序依次為"東南西北"(即:右下左上)。

第一行輸入兩個整數,空格間隔,分別表示矩陣的行數m和列數n;

接下來的連續m行,輸入迷宮矩陣的資訊。

求得的通路以三元組(i,j,d)的形式輸出。

其中:i,j指示迷宮的乙個座標;

d表示走到下一座標的方向(數字1表示東,數字2表示南,數字3表示西,數字4表示北);

終點d值為0。

9 8

00100010

00100010

00001101

01110010

00010000

01000101

01111001

11000101

11000000

(1,1,1)(1,2,2)(2,2,2)(3,2,3)(3,1,2)(4,1,2)(5,1,1)(5,2,1)(5,3,2)(6,3,1)(6,4,1)			(6,5,4)(5,5,1)(5,6,1)(5,7,2)(6,7,2)(7,7,2)(8,7,2)(9,7,1)(9,8,0)
用棧:
#include#include#define n 100

char map[100][100];

int map2[100][100];

int book[100][100];

int foot, flag;

typedef struct node_snode;

typedef struct seqstack;

seqstack seq;

void init(seqstack *s)

int isempty(seqstack *s)

int push(seqstack *s, node e)

int pop(seqstack *s/*, node *e*/)

/*node gettop(seqstack *s)

*/void dfs(node e, int step, int m, int n)

, , , };

if(e.x==m-1 && e.y==n-1)

for(int i=0; i<4; i++)

if(map2[_node.x][_node.y]==0 && book[_node.x][_node.y]==0)

pop(&seq);}}

}int main()

seqstack;

seqstack a[100];

int foot;

char map[100][100];

int map2[100][100];

int book[100][100];

void dfs(int x, int y, int step, int m, int n)

; if(x==m-1 && y==n-1)

for(int i=0; i<4; i++)

}}int main()

book[0][0]=1;

dfs(0, 0, 1, m, n);

a[0].x=a[0].y=a[0].f=1;

for(int i=0; iprintf("(%d,%d,%d)", m, n, 0);

return 0;

}

求解迷宮問題

求解迷宮問題 include using namespace std const int m 6 const int n 8 int maze m 2 n 2 m n大小的迷宮,0可前進,1通行受阻。並且在迷宮的周圍鑲上邊框 int mark m 2 n 2 儲存訪問標記,0未訪問,1已訪問 int...

迷宮問題求解

對於迷宮問題的求解,我們最後輸出的是迷宮的路徑,故符合佇列的先進先出特性,所以我們採用佇列的方式對迷宮進行求解 首先我們將建立乙個二維陣列 自定義初始化迷宮 7 7 int arr n n 二維陣列邊界用0填充,使之區域封閉,在實現過程 現陣列越界問題 接下來是 include include de...

棧求解迷宮問題

問題 假設下圖1是某迷宮的地圖 0代表路徑,1代表牆壁 問此迷宮是否有條通路?求解思想 用棧來實現解決問題,主要步驟是 1 將迷宮的入口座標設為當前座標 2 將當前座標壓棧,將當前座標上的值設為2 0變為2 代表已走過的路 3 判斷當前座標的四周 上下左右 是否是可以通 為0則通 的,如果是通的,那...