From e325fd405e7511c787019521817dba0836436a0a Mon Sep 17 00:00:00 2001 From: LHY0125 <3364451258@qq.com> Date: Tue, 16 Dec 2025 08:57:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- exercise/44.c | 56 +++++++++++++----------------------------------- exercise/44.exe | Bin 59466 -> 59466 bytes 2 files changed, 15 insertions(+), 41 deletions(-) diff --git a/exercise/44.c b/exercise/44.c index 7659a53..6bfca98 100644 --- a/exercise/44.c +++ b/exercise/44.c @@ -14,24 +14,24 @@ typedef struct 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的最短路径上的前驱顶点 +#define MaxInt 99999 // 最大边权值,用于初始化距离数组 +#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 n, i, v, w; // n为顶点数,i为循环变量,v为当前顶点,w为邻接顶点 int min; n = G->vexnum; - for (v = 0; v < n; ++v) + for (v = 0; v < n;++v) { S[v] = false; D[v] = G->arcs[v0][v]; - if (D[v] < MaxInt) + if (D[v]arcs[v][w] < D[w])) - { + { D[w] = D[v] + G->arcs[v][w]; Path[w] = v; } @@ -90,12 +84,7 @@ int main(void) { return 0; } - if (n < 1 || n > MAXN || m < 0) - { - printf("参数不符合要求\n"); - return 0; - } - + // 初始化邻接矩阵 AMGraph g = (AMGraph)malloc(sizeof(*g)); g->vexnum = n; @@ -104,9 +93,7 @@ int main(void) { 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; - } } // 输入边信息 @@ -114,28 +101,15 @@ int main(void) { 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) + if (x >= 1 && x <= n && y >= 1 && y <= n) { - 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; + if (z < g->arcs[x - 1][y - 1]) + g->arcs[x - 1][y - 1] = z; } } - // 执行Dijkstra算法 + // 调用Dijkstra算法 ShortestPath_DIJ(g, 0); if (D[n - 1] >= MaxInt) { diff --git a/exercise/44.exe b/exercise/44.exe index d48f4e883aab58cca5259a062ec5a887fc5dd892..8dada5836027420a70419bb1c37523c2f34779c7 100644 GIT binary patch delta 687 zcmYjOZAep57(Qp4DQpJvy zyEeOjLMZg7L=atQB^0CCtkDk}1(6U0X&bkq{)7wbbZ$oV{y6XZyodLBpXZ#+f;qEb zj*ppk-=4U9%#@y)cykXnYZGv(1lrZX(&O-vI$zobgDSG_;PxJoZ8OnAgU90$>`iim zPp&WKqU1Mbcv#@-Y;brTC)r?E9E(W{79Yb#HWf~ZPayl5iJek=tedxXo(BL2vS~{> z#7fb%GXTt6;(&(!LQ7arZ$dh)aUg^oijN%nXa;~8eNJ04kDRe2C#9LOhd_1j>=jQLHpW%)SaQV>UI=g2fcnZ@Ct`82gC94X|u`Ycz9#pMC;ASeAG#FfP2ocC;d$2qQzYv(#rzSuWrWXd2?La5&7dapMLjGZ@> z^2jawkt3FjgxRM;9}cvlS~eqyu`Dw_Lp_BQYPj$rH8h%mq8Gak zz1?n1Zcqe4JrqVgdBJK=quExAz$71P5QJruTTw5eVcgCo@w}XKet$mS!}nz8?AbYc ze8N`uc=BqC?WBG3!wmN8llY4h7ipJ^kK-vVQyj)E8Y%I%dzzJoql)VxwYv&wtqTu3 zsO-W_N;;VI90&PS^u6=~^FO%Q1=BQ{G`sgqdq*1$(>B^pJ5o$77&wm*i_E7Tn=y1# zrxD6H;t0Zc8`nCwSLm6N;5O2Ytyew7r#6}O-|Pr+;~_Xw1mce+shs8}>akY6yH89d z8X+hrypzjDnR)^-Lh@?<4P?-{vjudDpbjL#z{BeXTJ{BUu~%Zkcpb6p)%XNY+@5&{?#DkeBy_l|uCT|0}A7jlKJ?jJf- tKw+PS8t(IGKf8%`toJq!>z{g~A)9xncK2er<{x)zgNYsheN9BF{sH1_9CZKy