在2d矩阵中使用链接列表的Dfs - C
问题描述:
我得到了我的学校项目的任务,我不知道如何解决,我卡住了。我必须跑过这个迷宫:在2d矩阵中使用链接列表的Dfs - C
#T###########
#.#...R.....#
#.###.#.###.#
#...Q.#...#.#
#.#####C###F#
#.A.........#
#B#####E#K#L#
#.......#.#.#
###D#H###.#.#
#...#...J.P.#
#G###X#####.#
#.........N.#
#############
而在这个矩阵中,我必须找到哪个重要点是其邻居使用链接列表。
这应该是代码的输出:
A: L K F E C T Q B
B: H E D T Q A
C: L K F E A R F
D: G H E B
E: H D B L K F C A
F: L K E C A R C
G: X N D
H: X J E D B
J: X H P K
K: P J L F E C A
L: P N K F E C A
N: X G P L
P: N L K J
Q: R T B A
R: F C Q
T: Q B A
X: N G J H
int rekurzia(int x,int y)
{
if ((x < 0) || (x > MAX - 1) || (y < 0) || (y > MAX - 1))
return false;
if((matica[x][y] >= 'A') && (matica[x][y] <= 'Z'))
printf("%c\n", matica[x][y]);
if (matica[y][x] != '.')
return false;
if (rekurzia(x,y-1) == true)
return true;
if (rekurzia(x+1,y) == true)
return true;
if (rekurzia(x,y+1) == true)
return true;
if (rekurzia(x-1,y) == true)
return true;
return false;
}
我做这样的事情。有人能帮我做我应该怎么做吗?谢谢 !
答
这是一个针对学校项目的极具挑战性的问题!但看起来很有趣!如果我不得不解决这个问题,我会;
- 获取每个字母字符的所有地址,所以我知道,所有的启动点(走纯粹矩阵做一个循环内部(循环)
- 构建一个递归函数(即保持调用一个函数然后自己),我将允许功能;
- 产卵关中4个向量(上,下,左,右)
- 如果函数遇到一个“#”(墙),它会返回任何结果和停止,
- 如果它找到了一个“。”走廊它wou ld在4个以上的向量中继续,
- 如果遇到字母字符,则返回该字符。
- 对于每个已知的alpha位置调用递归函数并让它“漫游”。
- 加分,你可以使用并行编程,同时开始每个已知位置:)
陷阱: - 注意无尽的通话 - 不漫游过去矩阵的边界
太如现在所述那样广泛。发布你的代码并描述你的问题。 – LPs