看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
MOONRAKER: 這種不是有標準作法 左手摸著牆壁走 07/26 14:05
MOONRAKER: 根本不需要知道終點在哪裡 07/26 14:05
CaptainH: dfs bfs ... 各種搜尋算法 07/26 14:42
gozule: bfs or dfs即可求解 07/26 17:47
Qbsuran: 用stack摸牆壁啊 知道終點哪叫迷宮 07/26 21:14
MOONRAKER: 他實作這個不就DFS 07/27 09:48