在限定范围内从一个数到另一个数的最短路径

本文关键字:一个 另一个 最短路径 范围内 | 更新日期: 2023-09-27 17:49:18

我有一个float,它夹在另外两个floats之间,形成了它的可能值的范围。在我的设置中,如果值超过范围的任何一个端点,它将流向另一端。也就是说,如果该值夹在0和10之间,而该值本身为9,则在其上加上2使其流向0 (9 -> 10 -> 0)

我需要计算范围内两个值之间的最短"路径",所以如果我想知道从2到9的最短路径,它将是2 -> 1 -> 0 -> 10 -> 9,这意味着我必须从中减去4。

我一直想找出一个解决办法,但就是想不明白。

在限定范围内从一个数到另一个数的最短路径

对于您的示例,在计算溢出时,从上范围值到下范围值需要1。所以我用它作为常量

float a,b, bound1, bound2; // input data
var path1 = b - a; // straight way
var absPath1 = Math.Abs(path1);
var range = bound2 - bound1;
var path2 = range - absPath1 + 1;
if(b > a) path2 = -path2;
var absPath2 = Math.Abs(path2);
var shortestPath = absPath1 > absPath2 ? path1 : path2;