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

看板C_and_CPP作者 (銅鑼灣扛報紙)時間9年前 (2016/07/26 13:01), 編輯推噓3(303)
留言6則, 4人參與, 最新討論串1/1
開發平台(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'時就停止 小弟我試很久都沒有辦法 最多就走到第一列就結束了 麻煩大家了 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.246.40.93 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1469509273.A.4DB.html

07/26 14:05, , 1F
這種不是有標準作法 左手摸著牆壁走
07/26 14:05, 1F

07/26 14:05, , 2F
根本不需要知道終點在哪裡
07/26 14:05, 2F

07/26 14:42, , 3F
dfs bfs ... 各種搜尋算法
07/26 14:42, 3F

07/26 17:47, , 4F
bfs or dfs即可求解
07/26 17:47, 4F

07/26 21:14, , 5F
用stack摸牆壁啊 知道終點哪叫迷宮
07/26 21:14, 5F

07/27 09:48, , 6F
他實作這個不就DFS
07/27 09:48, 6F
文章代碼(AID): #1NbkwPJR (C_and_CPP)