//定義狀態常量
#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型別陣列來表示迷宮 因為每乙個路口的四個方向相...