Dfs在2d矩阵中使用链表 - C

时间:2017-05-09 09:18:33

标签: c matrix linked-list 2d dfs

我为我的学校项目做了一项我不知道如何解决的任务,而且我被困住了。我必须跑过这个迷宫:

    #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;
  }

我这样做。有人可以帮助我,我该怎么做?谢谢!

1 个答案:

答案 0 :(得分:1)

对于学校项目来说,这是一个极具挑战性的问题!但看起来很有趣!

如果我必须解决这个问题,我会这样做;

  1. 获取每个字母字符的所有地址,这样我就知道所有起点都在哪里(只需走遍矩阵就可以了(环路内循环)
  2. 构造一个递归函数(一个不断调用自身的函数),然后我将允许该函数;
    • 在4个向量中生成(向上,向下,向左,向右)。
    • 如果函数遇到“#”(墙),它将不返回任何内容并停止,
    • 如果发现“。”走廊它将继续增加4个向量,
    • 如果遇到字母字符,则返回该字符。
  3. 对于每个已知的alpha位置调用递归函数并让它“漫游”。
  4. 对于额外的积分,您可以使用并行编程同时启动每个已知位置:)
  5. 陷阱: - 留意无尽的电话 - 不要漫游到矩阵的边界