路径算法调整为动态规划方式,新增预任务申请功能
This commit is contained in:
@@ -11,13 +11,13 @@ namespace Tnb.Common.Utils
|
||||
/// <summary>
|
||||
/// 迪杰斯特拉(最短路径算法)
|
||||
/// </summary>
|
||||
public class Dijkstra<T> where T : BaseEntity<string>, new()
|
||||
public class Dijkstra
|
||||
{
|
||||
public static int MAX = int.MaxValue;
|
||||
|
||||
public int mEdgNum; // 边的数量
|
||||
public VNode[] mVexs; // 顶点数组
|
||||
|
||||
private EData[] edges; //边的数组
|
||||
/*
|
||||
* 创建图
|
||||
*
|
||||
@@ -27,7 +27,7 @@ namespace Tnb.Common.Utils
|
||||
*/
|
||||
public Dijkstra(string[] vexs, EData[] edges)
|
||||
{
|
||||
|
||||
this.edges = edges;
|
||||
// 初始化"顶点数"和"边数"
|
||||
int vlen = vexs.Length;
|
||||
int elen = edges.Length;
|
||||
@@ -142,7 +142,7 @@ namespace Tnb.Common.Utils
|
||||
// 对"起点D"自身进行初始化
|
||||
flag[vs] = true;
|
||||
dist[vs] = 0;
|
||||
|
||||
HashSet<int> set = new();
|
||||
// 遍历mVexs.Length-1次;每次找出一个顶点的最短路径。
|
||||
int k = 0;
|
||||
for (int i = 1; i < mVexs.Length; i++)
|
||||
@@ -154,9 +154,12 @@ namespace Tnb.Common.Utils
|
||||
{
|
||||
if (flag[j] == false && dist[j] < min)
|
||||
{
|
||||
|
||||
min = dist[j];
|
||||
k = j;
|
||||
set.Add(j);
|
||||
}
|
||||
|
||||
}
|
||||
// 标记"顶点k"为已经获取到最短路径
|
||||
flag[k] = true;
|
||||
@@ -173,14 +176,6 @@ namespace Tnb.Common.Utils
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 打印dijkstra最短路径的结果
|
||||
//Console.WriteLine("dijkstra({0}): \n", mVexs[vs].data);
|
||||
//for (int i = 0; i < mVexs.Length; i++)
|
||||
//{
|
||||
// Console.WriteLine("shortest({0}, {1})={2}\n", mVexs[vs].data, mVexs[i].data, dist[i]);
|
||||
//}
|
||||
//return vertexs;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -189,8 +184,17 @@ namespace Tnb.Common.Utils
|
||||
/// </summary>
|
||||
public class ENode
|
||||
{
|
||||
/// <summary>
|
||||
/// 该边所指向的顶点的位置
|
||||
/// </summary>
|
||||
public int ivex; // 该边所指向的顶点的位置
|
||||
/// <summary>
|
||||
/// 该边的权
|
||||
/// </summary>
|
||||
public int weight; // 该边的权
|
||||
/// <summary>
|
||||
/// 指向下一条弧的指针
|
||||
/// </summary>
|
||||
public ENode nextEdge; // 指向下一条弧的指针
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user