資料結構C語言版非迴圈順序佇列求解迷宮問題

2021-03-03 23:54:00 字數 2028 閱讀 8272

/*利用非迴圈順序佇列採用廣度搜尋法求解迷宮問題(一條路徑)

編譯環境:dev-c++ 4.9.9.2

日期:2023年2月12日

*/#include

#include

#define m 5 // 迷宮行數(包括外牆)

#define n 5 // 迷宮列數(包括外牆)

#define d 4 // 移動方向數,只能取4和8。(8個,可斜行;4個,只可直走)

// 移動陣列,移動方向由正東起順時針轉

struct

move[d]=,,,,,,,};

#endif

#if d==4

}move[d]=,,,};

#endif

// 定義棧元素型別和佇列元素型別,兩者為相同型別。

typedef struct

selemtype, qelemtype;

#define stack_init_size 10 // 儲存空間初始分配量

#define stackincrement 2 // 儲存空間分配增量

// 棧的順序儲存表示 p46

typedef struct sqstack

sqstack; // 順序棧

// 順序佇列(非迴圈,因為是非迴圈的,所以需要判斷是否溢位

#define maxqsize 5 // 最大佇列長度(對於迴圈佇列,最大佇列長度要減1)

typedef struct

s**ueue;

// 構造乙個空佇列q

int initqueue(s**ueue *q)

// 銷毀佇列q,q不再存在

int destroyqueue(s**ueue *q)

// 若佇列q為空佇列,則返回1,否則返回0

int queueempty(s**ueue q)

// 插入元素e為q的新的隊尾元素

int enqueue(s**ueue *q,qelemtype e)

*((*q).base+(*q).rear)=e;

(*q).rear++;

return 1;

}// 若佇列不空,則刪除q的隊頭元素,用e返回其值,並返回1,否則返回0

int dequeue(s**ueue *q,qelemtype *e)

// 構

造乙個空棧s。

int initstack(sqstack *s)

i=0; /

// i為走出迷宮的步驟

while(!stackempty(s))

printf("走出迷宮的乙個方案:\n");

for(i=1;i

return 1int main()

for(i=1;i

printf("請按行輸入迷宮結構(不包括周邊,0為牆,1為通道),如1 0 0 1\n");

for(i=1;i

for(j=1;j

scanf("%d",&maze[i][j]);

printf("迷宮結構(包括外牆):\n");

for(i=0;i

path(maze);

system("pause");

return 0輸出效果:

3行3列迷宮(不包括外牆)

請按行輸入迷宮結構(不包括周邊,0為牆,1為通道),如1 0 0 1

1 0 1

1 1 1

1 0 1

迷宮結構(包括外牆):

0 0 0 0 0

0 1 0 1 0

0 1 1 1 0

0 1 0 1 0

0 0 0 0 0

請輸入入口的行,列(左上角為1,1)

1,1請輸入出口的行,列(右下角為3,3)

3,3走出迷宮的乙個方案:

1 0 1

2 3 4

-1 0 5

請按任意鍵繼續

資料結構 C語言版

考試大綱將陸續公布 計算機應用基礎考試大綱 主要考查計算機應用基礎知識,參考參考用書課後練習內容。其它同型別的計算機應用基礎教材均可作為複習用書 高等數學考試大綱 一 函式 二 極限 1 數列極限的概念 2 數列極限的性質 3 函式極限的概念 4 函式極限的定理 5 無窮小量和無窮大量 6 兩個重要...

資料結構 c語言版 複習

積少成多,爭取每天進步一點。資料結構複習資料 一 填空題 1.資料結構是一門研究非數值計算的程式設計問題中計算機的操作物件以及它們之間的關係和運算等的學科 2.資料結構被形式地定義為 d r 其中d是資料元素的有限集合 r是d上的關係有限集合 3.資料結構包括資料的邏輯結構 資料的儲存結構和資料的運...

資料結構 c語言版 複習

資料結構複習資料 一 填空題 1.資料結構是一門研究非數值計算的程式設計問題中計算機的操作物件以及它們之間的關係和運算等的學科。2.資料結構被形式地定義為 d,r 其中d是資料元素的有限集合,r是d上的關係有限集合。3.資料結構包括資料的邏輯結構 資料的儲存結構和資料的運算這三個方面的內容。4.資料...