Floyd算法应用了动态规划的思想,时间复杂度O(n3),空间复杂度O(n2),网上解释有很多,这里我只是做下笔记
using UnityEngine;
using System.Collections;
public class Floyd {
public const int infinity = 10000;
int[,] graph = new int[6, 6] {
{0, infinity, 10, infinity, 30, 100 },
{infinity, 0, 5, infinity, infinity, infinity },
{10, 5, 0, 50, infinity, infinity},
{infinity, infinity, 50, 0, 20, 10 },
{30, infinity, 50, 20, 0, 60 },
{100, infinity, infinity, 10, 60, 0 },
};
private int row;
private int[,] dis;
private int[,] path;
public Floyd() {
row = 6;
dis = new int[row, row];
path = new int[row, row];
}
public void Excute() {
for (int i = 0; i < row; i++) {
for (int j = 0; j < row; j++) {
dis[i, j] = graph[i, j];
path[i, j] = -1;
}
}
for (int k = 0; k < row; k++) {
for (int i = 0; i < row; i++) {
for (int j = 0; j < row; j++) {
if (dis[i, j] > dis[i, k] + dis[k, j]) {
dis[i, j] = dis[i, k] + dis[k, j];
path[i, j] = k;
}
}
}
}
Debug.Log("v1->v5:" + dis[1, 5]);
Debug.Log("v1->v3路径:" + path[1,3]);
}
}