Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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]);
                }
            }
        }
Beispiel #3
0
        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]);
                }
            }
        }