C語言迷宮求解 完結版

2021-06-18 05:53:57 字數 2317 閱讀 1511

//定義狀態常量

#define overflow -2

#define error 0

#define null 0

#define true 1

#define true 1

#define false 0

#define false 0

#define stack_init_size 100

#define stackincrement 10

#include

#include

/*初始化迷宮,1表示通道,0表示牆

*/int maze[8][8] = ;

//定義棧元素型別

typedef struct mstackelem

mstackelem;

//定義棧

typedef struct mstack;

//**********===stack的實現********************====

//初始化棧-------構造乙個空棧

void initstack(mstack *s)

s->top = s->base;

s->stacksize = stack_init_size;

}//向棧中新增元素

void push(mstack *s,mstackelem e)

s->top = s->base + s->stacksize; //重新分配空間,base的值其實已經改變,top的值也就相應的改變

s->stacksize += stackincrement;

}//將新元素加到棧頂

*(s->top++) = e;

}//獲得棧頂元素

mstackelem gettop(mstack *s)

else

}//刪除棧頂元素

void pop(mstack *s)

else

}//***********************************==求解迷宮的相關操作********************=//

//構造兩個棧,乙個用來儲存探索中的全部路徑,乙個用來儲存有效路徑

mstack realpath,path;

//判斷當前位置是否走過

int unpass(mstack path,mstackelem cur)

//每迴圈一次令頭指標下移乙個位置

(path.top)--;

}return flag;

}//獲得東面相鄰的位置

mstackelem geteast(mstackelem cur)

return cur;// 當y==7時返回的是它本身

} //獲得南面相鄰的位置

mstackelem getsouth(mstackelem cur)

return cur;// 當x==7時返回的是它本身

}//獲得西面相鄰的位置

mstackelem getwest(mstackelem cur)

return cur;// 當y==0時返回的是它本身

}//獲得北面相鄰的位置

mstackelem getnorth(mstackelem cur)

return cur;// 當cur.x==0時返回的還是它本身

}//獲得下乙個可通行的位置,按東南西北的方向試探

mstackelem getnext(mstackelem cur)

else if(getsouth(cur).val != 0 && unpass(path,getsouth(cur)))

else if(getwest(cur).val != 0 && unpass(path,getwest(cur)))

else if(getnorth(cur).val != 0 && unpass(path,getnorth(cur)))

//如果當前位置的四面或為牆或已走過,則返回的next的val值為-1

return next;

}//獲得迷宮路徑的函式

int getmazepath()

else if(cur.val == -1)

}else

}} while (cur.x != end.x || cur.y != end.y);

}//列印迷宮路徑

void printmazepath(mstack *s)

//最後乙個結點沒有後繼,所以不再輸出"------>"

e = *(s->base);

printf("maze[%d][%d]",e.x,e.y);

}main()

迷宮求解 C

標籤 空格分隔 演算法 乙個迷宮,由n行m列的單元格組成 0 n,m 50 每個空格要麼為障礙物,要麼為空格,求一條從迷宮起點 1,1 到目標地點 小哈的位置 的最短路徑。通過起點去向下乙個位置探索,將下一步可以到達的位置加入佇列,並標記已經走過。然後從佇列中依次取點,再向下一步可以到達的位置探索,...

C語言專案 1 迷宮問題求解

無意中發現了乙個巨牛巨牛的人工智慧教程,忍不住分享一下給大家。教程不僅是零基礎,通俗易懂,小白也能學,而且非常風趣幽默,還時不時有內涵段子,像看 一樣,哈哈 我正在學習中,覺得太牛了,所以分享給大家。點這裡可以跳轉到教程!迷宮問題求解 define endm 8 目標點橫座標 define endn...

c語言迷宮問題求解 遞迴 棧回溯

第一次寫,見諒 以下是求迷宮的實現 為什麼下面會出現標籤啊,有什麼簡便的方法去掉嗎?求告知 最後是關於求所有通路,個人愚笨只想到改變搜尋方向順序這種笨方法,總共有16種 第一部分使用遞迴求解 為了資料的簡單化,不對路口進行資料結構化,將用乙個簡單的int型別陣列來表示迷宮 因為每乙個路口的四個方向相...