到达目的地的最小步数?

时间:2017-02-16 04:54:13

标签: java data-structures

我从几天开始学习数据结构。假设,我们有一个从节点层构建的数据结构。所有图层都以' start'节点并以空值而不是最后一个节点结束。每个节点都有一个',' foll'指向下一个节点的指针' down'指向同一层中下一个节点的指针。在每个图层上,值按升序排序。

示例:

  1. S ---- 9 -------------------------------------- > NULL

         | 
    
  2. S ----- 9 --------- 27 --------- 51 --------------> NULL

         |       |        |
    
  3. S ----- 9 --- 23 --- 27--29 --- 51 ---- 53 -------> NULL
  4. 节点的数据结构:

       `      Class Node {
                      int value;
                       Node foll;
                          Node down;
                      }                 `
    

    编写一个函数 findNode ,它将获得一个起始节点头和一个搜索值,并将返回到达节点所需的最小跳转次数使用该值或确定它在数据结构中不存在。

    输入:图层数,后跟每个图层的新节点列表,最后是应找到的数字。所有值都是大于零的整数。

    4
    
    7
    
    27 51
    
    24 80
    
    4 32 54 69 82
    
    54
    

    将导致上述数据结构,并且要找到的值为54

    输出

    7
    

    任何人都可以告诉我,在Java中应该遵循什么功能?

    static int findNode(Node start, int value) { }

1 个答案:

答案 0 :(得分:0)

解决此问题的最简单方法是使用递归解决方案。将此问题视为从一个节点开始,然后在每个可能的方向上扩展,直到它到达它正在寻找的节点。

在任何递归函数中你需要的第一件事是一个基本案例,或者当它无法继续下去时该怎么做。在我们的例子中,如果我们在没有找到我们想要的节点的情况下到达终点,我们可能会中断,或者如果找到我们想要的节点则返回1。

下一部分是递归调用。因此,如果我们没有找到我们想要的东西并且我们有更多的地方可去,那么我们可以继续前往周围的节点并在每次调用时将深度加1。

在代码中,这将类似于:

static int findNode(Node start, int value){
    if(start.value == value)
        return 1;
    else if(Node == null)
        break;

    return Math.min(findNode(start.foll) + 1, findNode(start.down) + 1);
}

你可能需要稍微改变这一点并与另一种停止方式交换休息,但希望这会给你一个想法。