void ShortestPath_DIJ(MGraph G,int v0,int(*P)[MAX_VERTEX_NUM][MAX_VERTEX_NUM],int(*D)[MAX_VERTEX_NUM]) { int v,w,i,min,j; int final[MAX_VERTEX_NUM]; for (v=0;v<G.vexnum;++v) { final[v]=FALSE; D[v]=G.arcs[v0][v].adj; for (w=0;w<G.vexnum;++w)//设空路径 { P[v][w]=FALSE; } if (D[v]<INFINITY) { P[v][v0]=TRUE; P[v][v]=TRUE; } } D[v0]=0; final[v0]=TRUE;//初始化,v0顶点属于S集 //开始主循环,每次求得v0到某个顶点的最短路径 for (i=1;i<G.vexnum;++i)//其余顶点 { min=INFINITY; for(w=0;w<G.vexnum;++w) { if (final[w]!=TRUE)//w顶点在V-S中 if (D[w]<min)//找离V0最近的点 { v=w; min=D[w]; } } final[v]=TRUE; for (w=0;w<G.vexnum;++w)//更新当前最短路径及距离 if (final[w]!=TRUE&&(min+G.arcs[v][w].adj<D[w])) { D[w]=min+G.arcs[v][w].adj; for (j=0;j<G.vexnum;++j) { P[w][j]=P[v][j]; } P[w][w]=TRUE;//p[w]=p[v]+[w]更换路径 } } }修改为c语言代码
时间: 2023-11-25 16:04:17 浏览: 91
好的,这是修改后的C语言代码:
```c
void ShortestPath_DIJ(MGraph G, int v0, int P[MAX_VERTEX_NUM][MAX_VERTEX_NUM], int D[MAX_VERTEX_NUM]) {
int v, w, i, min, j;
int final[MAX_VERTEX_NUM];
for (v = 0; v < G.vexnum; ++v) {
final[v] = FALSE;
D[v] = G.arcs[v0][v].adj;
for (w = 0; w < G.vexnum; ++w) {
P[v][w] = FALSE;
}
if (D[v] < INFINITY) {
P[v][v0] = TRUE;
P[v][v] = TRUE;
}
}
D[v0] = 0;
final[v0] = TRUE;
for (i = 1; i < G.vexnum; ++i) {
min = INFINITY;
for (w = 0; w < G.vexnum; ++w) {
if (final[w] != TRUE) {
if (D[w] < min) {
v = w;
min = D[w];
}
}
}
final[v] = TRUE;
for (w = 0; w < G.vexnum; ++w) {
if (final[w] != TRUE && (min + G.arcs[v][w].adj < D[w])) {
D[w] = min + G.arcs[v][w].adj;
for (j = 0; j < G.vexnum; ++j) {
P[w][j] = P[v][j];
}
P[w][w] = TRUE;
}
}
}
}
```
其中,MAX_VERTEX_NUM是顶点的最大个数,INFINITY表示无穷大。注意,这里的P数组存储的是布尔型值,表示是否经过了该顶点;而D数组存储的是最短路径的长度。
阅读全文