路径算法调整为动态规划方式,新增预任务申请功能

This commit is contained in:
DEVICE8\12494
2023-06-13 18:11:37 +08:00
parent 759b66d789
commit 5a49b9ba97
14 changed files with 602 additions and 69 deletions

View File

@@ -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; // 指向下一条弧的指针
}