From f90a7d1d0b8285d37772507760e62d6c4a627375 Mon Sep 17 00:00:00 2001 From: LHY0125 <3364451258@qq.com> Date: Tue, 16 Dec 2025 08:49:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0Dijkstra=E7=AE=97=E6=B3=95?= =?UTF-8?q?=E6=B1=82=E6=9C=80=E7=9F=AD=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 2 +- exercise/44.c | 141 +++++++++++++++++++++++++++++++++++++++++- exercise/44.exe | Bin 0 -> 59466 bytes 3 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 exercise/44.exe diff --git a/.vscode/settings.json b/.vscode/settings.json index 7b08d16..c10c8c7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,7 +4,7 @@ "C_Cpp_Runner.debuggerPath": "gdb", "C_Cpp_Runner.cStandard": "c17", "C_Cpp_Runner.cppStandard": "c++17", - "C_Cpp_Runner.msvcBatchPath": "C:/Program Files/Microsoft Visual Studio/VR_NR/Community/VC/Auxiliary/Build/vcvarsall.bat", + "C_Cpp_Runner.msvcBatchPath": "", "C_Cpp_Runner.useMsvc": false, "C_Cpp_Runner.warnings": [ "-Wall", diff --git a/exercise/44.c b/exercise/44.c index 516b889..7659a53 100644 --- a/exercise/44.c +++ b/exercise/44.c @@ -1,11 +1,81 @@ #include #include +#include #ifdef _WIN32 #include #endif +// 邻接矩阵存储图 +typedef struct +{ + int vexnum; + int **arcs; +} AMGraphStruct; +typedef AMGraphStruct *AMGraph; + +// 定义最大顶点数和最大边权值 +#define MaxInt 0x3f3f3f3f +#define MAXN 1005 // 最大顶点数 +static bool S[MAXN]; // S[i]为true表示顶点i已加入集合S,否则未加入 +static int D[MAXN]; // D[i]为v0到顶点i的当前最短路径长度 +static int Path[MAXN]; // Path[i]为v0到顶点i的最短路径上的前驱顶点 + +// Dijkstra算法求最短路径 +void ShortestPath_DIJ(AMGraph G, int v0) +{ + // 初始化 + int n, i, v, w; // n为顶点数,i为循环变量,v为当前顶点,w为邻接顶点 + int min; + n = G->vexnum; + for (v = 0; v < n; ++v) + { + S[v] = false; + D[v] = G->arcs[v0][v]; + if (D[v] < MaxInt) + { + Path[v] = v0; + } + else + { + Path[v] = -1; + } + } + S[v0] = true; + D[v0] = 0; + + // 主循环,每次求得v0到某个顶点的最短路径,并将该顶点加入集合S + for (i = 1; i < n; ++i) + { + // 在V-S中选择距离v0最近的顶点u + min = MaxInt; + for (w = 0; w < n; ++w) + { + if (!S[w] && D[w] < min) + { + v = w; + min = D[w]; + } + } + + // 如果min为MaxInt,说明v0到其他顶点的路径都不可达 + if (min == MaxInt) + { + break; + } + S[v] = true; + + // 修改当前最短路径及距离 + for (w = 0; w < n; ++w) + { + if (!S[w] && (D[v] + G->arcs[v][w] < D[w])) + { + D[w] = D[v] + G->arcs[v][w]; + Path[w] = v; + } + } + } +} -// Dijkstra int main(void) { #ifdef _WIN32 @@ -14,6 +84,75 @@ int main(void) SetConsoleCP(65001); #endif + // 输入顶点数和边数 + int n, m; + if (scanf("%d %d", &n, &m) != 2) + { + return 0; + } + if (n < 1 || n > MAXN || m < 0) + { + printf("参数不符合要求\n"); + return 0; + } + + // 初始化邻接矩阵 + AMGraph g = (AMGraph)malloc(sizeof(*g)); + g->vexnum = n; + g->arcs = (int **)malloc((size_t)n * sizeof(int *)); + for (int i = 0; i < n; ++i) + { + g->arcs[i] = (int *)malloc((size_t)n * sizeof(int)); + for (int j = 0; j < n; ++j) + { + g->arcs[i][j] = (i == j) ? 0 : MaxInt; + } + } + + // 输入边信息 + for (int i = 0; i < m; ++i) + { + int x, y, z; + if (scanf("%d %d %d", &x, &y, &z) != 3) + { + for (int k = 0; k < n; ++k) free(g->arcs[k]); + free(g->arcs); + free(g); + printf("参数不符合要求\n"); + return 0; + } + if (x < 1 || x > n || y < 1 || y > n || z <= 0 || z > 10000) + { + for (int k = 0; k < n; ++k) free(g->arcs[k]); + free(g->arcs); + free(g); + printf("参数不符合要求\n"); + return 0; + } + if (z < g->arcs[x - 1][y - 1]) + { + g->arcs[x - 1][y - 1] = z; + } + } + + // 执行Dijkstra算法 + ShortestPath_DIJ(g, 0); + if (D[n - 1] >= MaxInt) + { + printf("-1\n"); + } + else + { + printf("%d\n", D[n - 1]); + } + + // 释放内存 + for (int i = 0; i < n; ++i) + { + free(g->arcs[i]); + } + free(g->arcs); + free(g); return 0; } \ No newline at end of file diff --git a/exercise/44.exe b/exercise/44.exe new file mode 100644 index 0000000000000000000000000000000000000000..d48f4e883aab58cca5259a062ec5a887fc5dd892 GIT binary patch literal 59466 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�G6h+BNEUJXuU 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