走迷宮步驟:
使用二維陣列來表示迷宮地圖。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...