#include<stdio.h> using namespace std; struct ENode { int adjVex; int w; ENode nextArc; }; ENode a; //邻接表 int cost; //cost[i]表示i节点到汇点的最短路径长度 int n; //总节点数 int m; //总边数 int i; //循环变量 void CreatGraph(); //构建邻接表 void FMultiGraph(); //多段图的向前递推算法 int main() { cin>>n>>m; a=(ENode **)malloc(nsizeof(ENode)); CreatGraph(); FMultiGraph(); cout<<cost[0]<<endl; free(cost); for(i=0;i<n;i++) free(a[i]); return 0; } //构建邻接表 void CreatGraph() { int u,v; int w; ENode t; //临时变量 for(i=0;i<n;i++) a[i]=NULL; for(i=0;i<m;i++) { cin>>u>>v>>w; t=(ENode)malloc(sizeof(ENode)); t->adjVex=v; t->nextArc=a[u]; t->w=w; a[u]=t; } } //多段图的向前递推算法 void FMultiGraph() { cost=(int)malloc(nsizeof(int)); cost[n-1]=0; //汇点到汇点的最短路径长度为0 int min; ENode *r; //临时变量 for(i=n-2;i>=0;i--) { min=0x7fffffff; for(r=a[i];r;r=r->nextArc) { if(r->w+cost[r->adjVex]<min) min=r->w+cost[r->adjVex]; } cost[i]=min; } }将这段代码改成c语言形式
时间: 2023-12-04 22:06:16 浏览: 75
把代码中的 `using namespace std;` 去掉,因为在 C 语言中没有命名空间的概念。
同时需要将 `cin` 改成 `scanf`,将 `cout` 改成 `printf`。
改动后的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
struct ENode {
int adjVex;
int w;
struct ENode* nextArc;
};
struct ENode** a; //邻接表
int* cost; //cost[i]表示i节点到汇点的最短路径长度
int n; //总节点数
int m; //总边数
int i; //循环变量
void CreatGraph(); //构建邻接表
void FMultiGraph(); //多段图的向前递推算法
int main() {
scanf("%d%d", &n, &m);
a = (struct ENode**) malloc(n * sizeof(struct ENode*));
CreatGraph();
FMultiGraph();
printf("%d\n", cost[0]);
free(cost);
for (i = 0; i < n; i++)
free(a[i]);
free(a);
return 0;
}
//构建邻接表
void CreatGraph() {
int u, v;
int w;
struct ENode* t; //临时变量
for (i = 0; i < n; i++)
a[i] = NULL;
for (i = 0; i < m; i++) {
scanf("%d%d%d", &u, &v, &w);
t = (struct ENode*) malloc(sizeof(struct ENode));
t->adjVex = v;
t->nextArc = a[u];
t->w = w;
a[u] = t;
}
}
//多段图的向前递推算法
void FMultiGraph() {
cost = (int*) malloc(n * sizeof(int));
cost[n - 1] = 0; //汇点到汇点的最短路径长度为0
struct ENode* r; //临时变量
int min;
for (i = n - 2; i >= 0; i--) {
min = 0x7fffffff;
for (r = a[i]; r; r = r->nextArc) {
if (r->w + cost[r->adjVex] < min)
min = r->w + cost[r->adjVex];
}
cost[i] = min;
}
}
```
阅读全文