[问题] 老鼠走迷宫 终点未知情况

楼主: 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