一、題目及分析
二、思路
迷宮
迷宮的檔案儲存方式
##########
#..#...#.#
#..#...#.#
#....##..#
#.###....#
#...#....#
#.#...#..#
#.###.##.#
##.......#
##########
三、**
#include#include#define length 10
#define width 10
#define start_hang 1 //從0行開始計算row
#define start_lie 1//從0列開始column
#define end_hang 8
#define end_lie 8
#define stack_init_size length*width
char maze[width][length];
typedef struct
postype;
typedef struct
selemtype;
typedef struct
sqstack;
void initstack(sqstack *s)
s->top=s->base;
s->stacksize=stack_init_size;
}void push(sqstack *s,selemtype e)
s->top=s->base+s->stacksize;
s->stacksize+=2;
} *s->top++=e;//printf("$**");//檢驗入棧
}void readmaze()//從檔案中讀入迷宮 。用#表示牆壁,用.表示通路,重點用b表示
for(i=0;itop--;//從路徑中刪除該通道塊;//這裡要補上標記
if(s->base!=s->top) //若棧不為空,重新測試新的棧頂
}
} }while(s->base!=s->top);
return -1;//跳出迴圈說明沒有路徑
} void primazepath(sqstack *s) }
void main()
primazepath(&s);
}
四、**分析
1、檔案讀取字元的時候,要注意單獨接收換行符,排除換行符的干擾。(詳見c語言檔案章節)
2、不能用指標返回在呼叫函式中建立的棧的位址。因為棧的生命週期和函式的週期相同。(具體的原因目前不清楚)
3、結構體中如果含有指標元素,則在複製中存在淺拷貝問題。(即指標複製了位址,它們指向相同的空間。也即乙個空間,兩個位址,物理空間中的內容並沒有開闢空間進行複製)。
五、體會
這是我目前寫過最難的**了。出了很多問題,也花了很多時間,中間也有焦躁。
保持乙個平常心敲**。踏踏實實的打好基礎。
棧實現迷宮求解問題
總體感觸是 不要著急,一步一步來,問題很容易解決的。首先是要實現乙個迷宮的地圖。明確如何儲存地圖,用vector實現二維陣列,每個元素代表地圖的乙個格仔。需要儲存哪些資訊。一張地圖的某乙個方格需要標示 能否通過,是否走過了。94 struct point 位置資訊可用postype儲存。就是 str...
C 棧實現迷宮求解
給出乙個迷宮,求解從路口到出口的全部路徑是乙個經典問題,c 實現 如下 algrithm practice.cpp 定義控制台應用程式的入口點。include stdafx.h using namespace std define d 10 迷宮的維度 include includeint maze...
利用棧實現迷宮求解
如下是每個節點的資料結構 1 typedef struct direction 方向 78 typedef struct point 位置 1213 14 typedef struct stacknode linkstackptr 節點資料結構 鏈棧及基本操作實現 1 typedef struct ...