給乙個n*n的方格,讓你求從左上角到所給一點的任意一條路徑並輸出
該題用到dfs,以下是對dfs的簡要解析 :詳解請參見 傳送門
dfs是一種用於遍歷或搜尋樹或圖的演算法。 沿著樹的深度遍歷樹的節點,盡可能深的搜尋樹的分支。當節點v的所在邊都己被探尋過或者在搜尋時結點不滿足條件,搜尋將回溯到發現節點v的那條邊的起始節點。整個程序反覆進行直到所有節點都被訪問為止。屬於盲目搜尋,最糟糕的情況演算法時間複雜度為o(!n)。
下面上**:
#include#include#define m 8
#define n 8
#define maxn 100
using namespace std;
int mg[m+2][n+2];
typedef struct box;
typedef struct sttype;
bool push(sttype* &s,box e)
s->top++;
s->data[s->top]=e;
return true;
}void init(sttype *&s)
bool pop(sttype *&s,box &e)
e=s->data[s->top];
s->top--;
return true;
}bool gettop(sttype *s,box &e)
bool stackempty(sttype *s)
void destroy(sttype* &s)
bool mgpath(int xi,int yi,int xe,int ye)
while (k>=1)
printf("\n");
destroy(st);
return true;
}find=false;
while(di<4&&!find)
if(mg[i1][j1]==0)
}if(find)
else
}destroy(st);
return false;
}int main()
}printf(" 請輸入結束位置:\n");
// scanf("%d%d",&xe,&ye);
if(!mgpath(1, 1, m, n))
return 0;}/*
1 1 1 1 1 1 1 1 1 1
1 0 0 1 0 0 0 1 0 1
1 0 0 1 0 0 0 1 0 1
1 0 0 0 0 1 1 0 0 1
1 0 1 1 1 0 0 0 0 1
1 0 0 0 1 0 0 0 0 1
1 0 1 0 0 0 1 0 0 1
1 0 1 1 1 0 1 1 0 1
1 1 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1
*/
資料結構 棧實現迷宮尋路問題
思路 解決迷宮求解的問題,從入口出發,順某一方向向前探索,若能走通,則繼續往前走 否則沿原路退回,換乙個方向再繼續探索,直至所有可能的通路都探索到為止。為了保證在任何位置上都能沿原路退回,所以需要用乙個後進先出的結構來儲存從入口到當前位置的路徑。因此,在求迷宮通路的演算法 塊maze.h defin...
c資料結構 棧 迷宮問題(迴圈實現)
走迷宮步驟 使用二維陣列來表示迷宮地圖。1表示可以走,0表示不能走。設定迷宮入口。判斷迷宮入口是否合法。將入口點入棧 將當前點設定為入口點。loop 判斷是否能往左走,能則將當前點壓棧。goto loop 判斷是否能忘上走,能則將當前點壓棧。goto loop 判斷是否能往右走,能則將當前點壓棧。g...
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...