[問題] 老鼠走迷宮 終點未知情況

作者: liane5566 (銅鑼灣扛報紙)   2016-07-26 13:01:10
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VS2015
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)

問題(Question):
目前已經完成 "已知起點和終點的座標位置" 的走迷宮
但若是一開始老鼠走的時候 起點已知 可是 "終點未知"的情況呢?
餵入的資料(Input):
EEEEOO
OEOEEE
GEEEOE
OOEOOE
EEEOOO
OOEEEE
G代表終點(但老鼠一開始未知其座標)
O代表牆壁
E代表可通行路徑
R代表已完成之正確路徑
預期的正確結果(Expected Output):
RRRROO
OEOREE
GRRROE
OOEOOE
EEEOOO
OOEEEE
程式碼(Code):(請善用置底文網頁, 記得排版)
Point pt(int x, int y) {
Point p = { x, y };
return p;
}
//pt的功用是儲存x y整數
char pathA(char maze[7][7], Point start, Point end) {
if (maze[start.x][start.y] == 'E') {
maze[start.x][start.y] = 'R';
if (maze[end.x][end.y] == 'E' &&
!(pathA(maze, pt(start.x, start.y + 1), end) != 'E' ||
pathA(maze, pt(start.x + 1, start.y), end) != 'E' ||
pathA(maze, pt(start.x, start.y - 1), end) != 'E' ||
pathA(maze, pt(start.x - 1, start.y), end) != 'E')) {
maze[start.x][start.y] = 'E';
} //內圈if
} //外圈if
return maze[end.x][end.y];
}
呼叫範例 pathA(f1, pt(1, 0), pt(6, 5));
意思就是 起點由(1,0)開始 終點座標為(6,5)
但若要改成找到G才停的話(且G座標一開始未知) 邏輯判斷要怎麼改呢?
基本上若終點未知,end這個變數就不會使用到
想法是maze[start.x][start.y]=='G'時就停止
小弟我試很久都沒有辦法 最多就走到第一列就結束了
麻煩大家了 謝謝!
作者: MOONRAKER (㊣牛鶴鰻毛人)   2016-07-26 14:05:00
這種不是有標準作法 左手摸著牆壁走根本不需要知道終點在哪裡
作者: CaptainH (Cannon)   2016-07-26 14:42:00
dfs bfs ... 各種搜尋算法
作者: gozule (好冷啊~~)   2016-07-26 17:47:00
bfs or dfs即可求解
作者: Qbsuran (Qbsuran)   2016-07-26 21:14:00
用stack摸牆壁啊 知道終點哪叫迷宮
作者: MOONRAKER (㊣牛鶴鰻毛人)   2016-07-27 09:48:00
他實作這個不就DFS

Links booklink

Contact Us: admin [ a t ] ucptt.com