時間限制: 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則通 的,如果是通的,那...