/// <summary> /// 使用floyd /// </summary> private void TestConvertFloyd() { var nodes = nodeDic.Values.ToList(); int nodeCount = nodeDic.Count; double[,] data = new double[nodeCount, nodeCount]; for (int i = 0; i < nodeCount; i++) { for (int j = 0; j < nodeCount; j++) { data[i, j] = 0; } } int startIndex, endIndex; foreach (var item in runLineDic.Values) { startIndex = nodes.IndexOf(item.StartNode); endIndex = nodes.IndexOf(item.EndNode); var lenght = runLineDic.FirstOrDefault(a => a.Value.Equals(item)).Key.Width; lenght = Math.Floor(lenght); if (item.RunDirection == 0) {//正向 data[startIndex, endIndex] = lenght; } else if (item.RunDirection == 1) {//反向 data[endIndex, startIndex] = lenght; } else if (item.RunDirection == 2) {//双向 data[startIndex, endIndex] = lenght; data[endIndex, startIndex] = lenght; } } for (int i = 0; i < nodeCount; i++) { Debug.Write(nodes[i].Name + ":\t"); for (int j = 0; j < nodeCount; j++) { Debug.Write(data[i, j] + "\t"); } Debug.WriteLine(""); } var floyd = new Util.Floyd(); floyd.MakePath(data); }
/// <summary> /// 生成路径 /// </summary> /// <param name="data"></param> public void MakePath(double[,] data) { Floyd test = new Floyd(data); for (int i = 0; i <= data.GetUpperBound(0); i++) { for (int j = 0; j <= data.GetUpperBound(0); j++) { Debug.WriteLine(""); Debug.Write("From " + i + " to " + j + " path is: "); for (int k = 0; k <= test.path.GetUpperBound(2); k++) { Debug.Write(test.path[i, j, k] + 1 + " "); } Debug.WriteLine(""); Debug.WriteLine("From " + i + " to " + j + " length :" + test.length[i, j]); } } }
public void Test() { //int[,] data = new int[,] { // { 0, 27, 44, 17, 11, 27, 42, 0, 0, 0, 20, 25, 21, 21, 18, 27, 0 },// x1 // { 27, 0, 31, 27, 49, 0, 0, 0, 0, 0, 0, 0, 52, 21, 41, 0, 0 },// 1 // { 44, 31, 0, 19, 0, 27, 32, 0, 0, 0, 47, 0, 0, 0, 32, 0, 0 },// 2 // { 17, 27, 19, 0, 14, 0, 0, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0 },// 3 // { 11, 49, 0, 14, 0, 13, 20, 0, 0, 28, 15, 0, 0, 0, 15, 25, 30 },// 4 // { 27, 0, 27, 0, 13, 0, 9, 21, 0, 26, 26, 0, 0, 0, 28, 29, 0 },// 5 // { 42, 0, 32, 0, 20, 9, 0, 13, 0, 32, 0, 0, 0, 0, 0, 33, 0 },// 6 // { 0, 0, 0, 0, 0, 21, 13, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0 },// 7 // { 0, 0, 0, 0, 0, 0, 0, 19, 0, 11, 20, 0, 0, 0, 0, 33, 21 },// 8 // { 0, 0, 0, 0, 28, 26, 32, 0, 11, 0, 10, 20, 0, 0, 29, 14, 13 },// 9 // { 20, 0, 47, 30, 15, 26, 0, 0, 20, 10, 0, 18, 0, 0, 14, 9, 20 },// 10 // { 25, 0, 0, 0, 0, 0, 0, 0, 0, 20, 18, 0, 23, 0, 0, 14, 0 },// 11 // { 21, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 27, 22, 0, 0 },// 12 // { 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0 },// 13 // { 18, 41, 32, 31, 15, 28, 0, 0, 0, 29, 14, 0, 22, 0, 0, 11, 0 },// 14 // { 27, 0, 0, 0, 25, 29, 33, 0, 33, 14, 9, 14, 0, 0, 11, 0, 9 },// 15 // { 0, 0, 0, 0, 30, 0, 0, 0, 21, 13, 20, 0, 0, 0, 0, 9, 0 } // 16 // }; //int[,] data = new int[,] { // { 0,10,0,5 ,0,0,0 },// 0 // { 0,0,4,0,20,0,0 },// 1 // { 0,0,0,0,0,0,0},// 2 // { 0,0,0,0,0,7,0},// 3 // { 0,0,0,0,0,0,0},// 4 // { 0,0,3,0,0,0,9},// 5 // { 0,0,0,0,40,0,0},// 6 // }; double[,] data = new double[, ] { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, // x1 { 0, 0, 3, 0, 0, 0, 0, 0, 0, 0 }, // 1 { 0, 3, 1, 0, 0, 0, 0, 0, 0, 1 }, // 2 { 0, 0, 0, 0, 0, 0, 0, 0, 3, 15 }, // 3 { 0, 0, 0, 7, 0, 0, 0, 10, 0, 0 }, // 4 { 10, 0, 0, 0, 8, 0, 0, 0, 0, 0 }, // 5 { 0, 0, 0, 0, 0, 0, 0, 0, 3, 0 }, // 6 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 7 { 0, 0, 0, 3, 0, 0, 3, 0, 0, 0 }, // 8 { 0, 0, 1, 15, 0, 0, 0, 25, 0, 0 }, // 9 }; //Floyd1(data); //return; //for (int i = 0; i < data.GetUpperBound(0); i++) // for (int j = i; j < data.GetUpperBound(0); j++) // if (data[i, j] != data[j, i]) return; Floyd test = new Floyd(data); for (int i = 0; i <= data.GetUpperBound(0); i++) { for (int j = 0; j <= data.GetUpperBound(0); j++) { Debug.WriteLine(""); Debug.Write("From " + (i + 1) + " to " + (j + 1) + " path is: "); for (int k = 0; k <= test.path.GetUpperBound(2); k++) { Debug.Write(test.path[i, j, k] + 1 + " "); } Debug.WriteLine(""); Debug.WriteLine("From " + (i + 1) + " to " + (j + 1) + " length :" + test.length[i, j]); } } }