C# 实现Dijkstra算法

来源:互联网 发布:郑州网络诈骗被一窝端 编辑:程序博客网 时间:2024/05/23 19:12
public void Dijkstra()        {            int [,] A = new int[6,6]                {                     {0,20,30,28,2048,2048 },                     {2048,0,20,2048,30,2048},                     {2048,2048,0,10,25,2048},                     {2048,2048,2048,0,2048,32},                     {2048,2048,2048,2048,0,15},                     {2048,2048,2048,2048,2048,0}                };            int i = 0;            int []TT = new int[6];            int min = 0;            string[] path = new string[6] {"","","","","",""};            string thisPath = "";            string allPath = "1";            int z = 0;            Console.Write("\n");            Console.Write("          Dijkstra算法" + "\n \n");            Console.Write("===========分析过程===========" + "\n \n");            Console.Write("第1步:"+"\n");            Console.Write("初始TT数组为:");            for (int c = 0;c<6;c++)            Console.Write(TT[c]+" ");            Console.Write("\n");            Console.Write("初始最小值为:" + min + "\n");            Console.Write("初始查找路径为:" + "1" + "\n \n");            while (z < 5)            {                if (i == 0)                {                    //查找第一列,初始化数组TT                    for (int j = 0; j < 6; j++)                    {                        if (A[i, j] != 0 && A[i, j] != 2048)                        {                            TT[j] =A[i, j];                            path[j] = (i + 1).ToString();                        }                    }                }                else                {                    for (int j = 0; j < 6; j++)                    {                        if (A[i, j] != 0 && A[i, j] != 2048)                        {                            bool isAdd = false;                            int w = i-1;                            while(w >=0)                            {                                if (A[w, j] != 0 && A[w, j] != 2048)                                {                                    int tmp = A[i, j] + min;                                    if (tmp < TT[j])                                    {                                        TT[j] = tmp;                                        path[j] =(i + 1).ToString();                                    }                                    isAdd = true;                                    break;                                }                                w--;                            }                            if (isAdd == false)                            {                                TT[j] = A[i, j] + min;                                path[j] = (i + 1).ToString();                            }                        }                    }                }                //查找TT数组中的最小值                int temp = 0;                Console.Write("第{0}步:" + "\n",z+2);                Console.Write("当前TT数组为:");                for (int t = 0; t < 6; t++)                {                    Console.Write(TT[t] + " ");                    if (TT[t] != 0 && temp == 0)                        temp = TT[t];                    else if (TT[t] != 0 && TT[t] < temp)                    {                        temp = TT[t];                    }                    min = temp;                }                for (int t = 0; t < 6; t++)                {                    if (TT[t] == min)                    {                        thisPath = path[t];                        TT[t] = 0;                        i = t;                    }                }                Console.Write("\n");                Console.Write("当前TT数组中的非零最小值为:" + min + "\n");                Console.Write("当前查找路径为:" + thisPath + "\n \n");                allPath += "," + thisPath;                z++;            }            Console.Write("===========分析结果===========" + "\n \n");            Console.Write("最小路径值为:" + min+"\n");            Console.Write("最终路径为:" + allPath + "\n");        }

结果如下图:


原创粉丝点击