寻找最短路径算法

时间:2020-01-26 15:38:44

标签: c++ arrays algorithm shortest-path

首先,感谢您抽出时间阅读这篇文章。

问题:

从给定数组中找到从 i j (i!= j; i,j> = 0)的最短路径,而您只能移动转到与当前元素具有相同值的任何元素。

示例: 我有一个包含9个数字的数组:int arr[9] = {7, 2, 5, 3, 8, 6, 9, 7, 0}; int i = 1, j = 6;

根据上述声明,我想从arr[i]arr[j](2到9),那么最短的路径是arr[1](2)-> arr[0]( 1st 7)-> arr[7](2nd 7)-> arr[6](9)(总共3个步骤)

更多示例:

int arr[9] = {7, 2, 5, 3, 8, 6, 9, 7, 0}; int i = 7, j = 8;步骤:1(7-> 8)

int arr[9] = {8, 2, 0, 3, 8, 6, 9, 7, 0}; int i = 0, j = 8;步骤:3(0-> 1-> 2-> 8)

int arr[9] = {1, 5, 7, 3, 4, 22, 9, 8, 6}; int i = 2, j = 7;步骤:5(2-> 3-> 4-> 5-> 6-> 7)

我试图遍历数组中的所有元素( i j 除外),以查看是否有任何元素具有相同的值并且最接近 j < / strong>,但我最终要处理更多案件。希望你们能帮助我,谢谢!!

1 个答案:

答案 0 :(得分:1)

好的,最简单的方法是:

  1. 创建另一个数组,将其命名为distance,并用值-1填充它。
  2. 设置distance[i] = 0,因为可以自由地从元素移动到自身
  3. distance上循环,对于每个不是-1的现有数字,在左侧和右侧的元素中填充当前元素的编号+ 1(仅当元素位于左/右等于-1
  4. 对于新填充的元素,在array中找到具有相同值的元素,并将其distance设置为与步骤3中相同的值。

一旦循环了足够多的时间,就会完全填充数组distance,它将告诉您元素距元素array[i]有多远。

如果您只需要distance[j]并且已经找到它,则可以提早退出循环。