迪杰斯特拉算法-简单容易理解
Posted 人还是要有梦想的
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迪杰斯特拉算法-简单容易理解相关的知识,希望对你有一定的参考价值。
1.最短路径算法
画一张图:简单
首先是连通图,单向连通图
1-4找到最短路径 first-last
遍历所有节点
1-所有节点判断,如果有的话前继节点就是1 2,5
这个时候我们就需要判断这几个节点2,5
但是我们还得遍历,因为我们不知道 这个时候找2的前继节点是
1吗?可能有其他路径在2没关系局部最优,因为如果有其他节点到2的话说明这个节点可以到2
如果距离更小,那么就选择这个节点为前继节点,但是必须是已经连接的节点,
复杂也就是这个原理
public int[,] matirx()
int[,] a = new int[5,5];
//int[][] a = a;
//Console.WriteLine(a);
for(int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
a[i,j] = 10000;
a[0,0] = 6;
a[0,1] = 5;
a[0, 4] = 1;
a[4, 3] = 1;
a[3, 1] = 1;
a[1,2] = 7;
return a;
public void dijiesitela()
int dis;
int[,] a = matirx();
//dis = a[0,2];
int[] value = new int[5];
int[] arr = new int[5];
bool[] flag1 = new bool[5];
//b[0]=
int first = 0;
int last = 2;
int count = 0;
int flag = 10000;
for(int xu = 0; xu < 5; xu++)
for(int xu1 = 0; xu1 < 5; xu1++)
Console.Write(a[xu, xu1] + " ");
Console.WriteLine();
for (int i = 0; i < 5; i++)
value[i] = 10000;
flag1[i] = false;
value[first] = 0;
for (int i = 0; i < 5; i++)
for (int ii = 0; ii < 5; ii++)
if (!flag1[ii] && value[ii] < 10000)
first = ii;
//Console.WriteLine(first);
flag1[first] = true;
//里面 判断first节点的后继节点
//first要改变
for (int j = 0; j < 5; j++)
if (j != first && value[first] + a[first,j] < value[j])
arr[j] = first;
value[j] = value[first] + a[first,j];
int[] last1 = new int[5];
last1[0] = 0;
last1[last] = 2;
/*for (int intint = 0; intint < arr.Length; intint++)
Console.WriteLine(arr[intint]);*/
int count1 = 1;
while (arr[last] != 0)
Console.WriteLine(arr[last]);
last = arr[last];
last1[count1]= arr[last];
//sleep(1000);
while (true)
Console.Write("");
以上是关于迪杰斯特拉算法-简单容易理解的主要内容,如果未能解决你的问题,请参考以下文章