c資料結構 棧 迷宮問題(迴圈實現)

2021-08-19 03:58:14 字數 3233 閱讀 7842

走迷宮步驟:

使用二維陣列來表示迷宮地圖。1表示可以走,0表示不能走。

設定迷宮入口。

判斷迷宮入口是否合法。

將入口點入棧

將當前點設定為入口點。

loop:

判斷是否能往左走,能則將當前點壓棧。goto loop

判斷是否能忘上走,能則將當前點壓棧。goto loop

判斷是否能往右走,能則將當前點壓棧。goto loop

判斷是否能往下走,能則將當前點壓棧。goto loop

判斷是否到達出口

判斷是否到達死胡同  是 ?出棧:將彈出的點設定為當前點 goto loop

迷宮定義:

typedef struct maze

maze;

壓棧的點定義:

typedef struct position position;
棧定義:

#define init_stacksize 100

typedef position datatype;

typedef struct stack stack;

具體**實現:

// 1. 對簡單迷宮進行求解----只有一條通路,迷宮不帶環

// >> 用迴圈的方式求解簡單迷宮問題

#include #include #include "stack.h"

#define max_row 6

#define max_col 6

// 判斷是不是通路,判斷是不是分支節點,入棧操作,判斷是不是出口

#define operate if (ispass(m, cur))\

typedef struct maze

maze;

// 初始化迷宮地圖資料

void initmap(maze* m, int map[max_row][max_col]);

// 檢測迷宮的入口是否有效

int isvalidenter(maze* m, position enter);

// 檢測cur位置是否為迷宮的出口

int ismazeexit(maze* m, position cur, position enter);

// 檢測當前位置是否為通路

int ispass(maze* m, position cur);

// 走迷宮

void passmazenor(maze* m, position enter, stack* s);

// 列印迷宮地圖資料

void printmap(maze* m);

// 列印路徑

void printpath(stack* s);

int main() ,

, ,

, ,

, };

maze* m = malloc(sizeof(maze));

if (m == null)

return;

initmap(m, map);

printmap(m);

position enter = ;

stack* path = (stack*)malloc(sizeof(stack));

stackinit(path);

passmazenor(m, enter, path);

// 列印路徑

printf("\n");

printmap(m);

printpath(path);

return 0;

}// 初始化迷宮地圖資料

void initmap(maze* m, int map[max_row][max_col]) }}

// 檢測迷宮的入口是否有效

int isvalidenter(maze* m, position enter)

// 檢測cur位置是否為迷宮的出口

int ismazeexit(maze* m, position cur, position enter)

return 0;

}// 檢測當前位置是否為通路

int ispass(maze* m, position cur)

// 走迷宮

void passmazenor(maze* m, position enter, stack* s)

}// 列印迷宮地圖資料

void printmap(maze* m)

printf("\n"); }}

// 列印路徑

void printpath(stack* s)

while (!stackempty(path))

}

棧的操作:

#include "stack.h"

#include "assert.h"

//初始化棧

void stackinit(stack* stack)

stack->_top = 0;

stack->_capacity = init_stacksize;

}//壓棧

void stackpush(stack* stack, datatype data)

stack->_top = stack->_capacity;

stack->_capacity = stack->_capacity + 10;

} *(stack->_array + stack->_top) = data;

stack->_top++;

}//出棧

int stackpop(stack* stack, datatype* data)

//先減一再取值

--stack->_top;

*data = *(stack->_array + stack->_top);

return 1;

}//判斷棧是否為空

int stackempty(stack* stack)

執行結果截圖:

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...

資料結構迷宮問題C 實現

出現實現圖 h檔案實現堆疊簡易操作 此處沒有將宣告與實現分離,應注意!pragma warning disable 4715 ifndef stack h define stack h struct position 結構體位置,表示迷宮每一格的行號和 列號 class stack bool ise...

資料結構 棧 c 迷宮

1,棧的基本操作和迷宮的資料結構 includeusing namespace std define stack init size 100 define stack increment size 100 typedef structposttype 座標結構 typedef struct bloc...