資料結構(c語言) 簡單迷宮

2021-09-13 01:39:16 字數 1527 閱讀 6843

迷宮:

對於乙個用空格和『#』號組成的迷宮,如下:,,

,,,,

,,,;

這是乙個10*10的迷宮。

如果碰到『#』,那個方向就走不通。

大致演算法

遞迴:初始點為(1,1),優先向右探路,不通就向下,還不通的就向左,再不通就向上探路。

棧每走一步,判斷是否走過,如果沒有,就把座標記錄到棧中。如果有,返回上一層遞迴。

#include"stdio.h"

#include"stdlib.h"

typedef struct position

*link,node;

link stack;

int book[10][10] = ;//定義乙個陣列用於標記,若該點走過,則置為1

//定義地圖

char map[10][10] =

, ,

, ,

, ,

, ,

, , };

void printmap();

int pop_print();

void pop();

void push(int , int );

int search(int ,int);

int main()

int now = 0;//當已經找到出路時,將now置為1,以結束遞迴

//(否則,如果還有別的路徑,就會輸出另一條路徑的一部分,此bug暫時還沒修復)

int search(int x, int y)

push(x, y);//將座標入棧

if (book[x][y] == 1)

book[x][y]=1;//將走過的點置為1,下次探索到這個點時直接return;

if (map[x][y + 1] != '#') //右邊不是障礙物,則向右探索,下同

search(x, y + 1);//注意,這裡不能用!!!y++!!!

//我之前就是用了y++導致找了好幾天bug。

//如果用y++,那麼一小段深搜結束返回時,y的值是被加 1 的了。

//等於不在是在原有座標換個位置探索了!!!

if (map[x + 1][y] != '#')

search(x + 1, y);

if (map[x - 1][y] != '#')

search(x - 1, y);

if (map[x][y - 1] != '#')

search(x, y - 1);

pop();//如果以上情況都不是,也將其出棧

return 0;

}int pop_print()//列印棧中元素

putchar('\n');

return 0;

}void pop()//出棧

void push(int a ,int b)//傳入的是座標,將其記錄到棧中

void printmap()//列印地圖

}

資料結構 C 迷宮

迷宮 include include missingroom.h using namespace std void main void missingroom find mystack stack m iroom m ix m iy 1 將該點的值改為 1,防止有回到起點。int i 1,j 1 i...

資料結構 迷宮和棧 C語言

include stdio.h include stdlib.h include time.h define mazesize 10 define ok 1 define error 0 define true 1 define false 0 define stack init size 100 ...

C語言資料結構 棧實現迷宮

include define max 30 typedef struct box typedef struct stack int map 10 10 int search int beginx,int beginy,int endx,int endy else return 1 find 0 wh...