基础实验6-2.5 城市间紧急救援 (25分)--dijkstra扩展
解题思路: 用dijkstra算法求单源最短路径,再用数组记录当前结点为终点时,最短路径的上一个结点的编号。 #include <stdio.h> #include <string.h> #define MaxVex 500+5 #define INF 0x3f3f3f3f int G[MaxVex][MaxVex];//图-邻接矩阵 int visit[MaxVex]= {0}; //标记访问数组 int path[MaxVex]= {-1}; //途经路径 int cnt[MaxVex];//最短路径数量 int dist[MaxVex];//最短路径 int rsc[MaxVex];//各城市救援队伍数量 int rs[MaxVex];//当前救援队伍数量 int Nv,Ne,s,d; //图的初始化 void Init() { int i,v1,v2,x; for(i=0; i<Nv; i++) { scanf("%d",&rsc[i]); rs[i]=rsc[i]; } memset(G,INF,sizeof(G)); for(i=0; i<Nv; i++) { G[i][i]=0; } for(i=0; i<Ne; i++) { scanf("%d %d %d",&v1,&v2,&x); G[v1][v2]=x; G[v2][v1]=G[v1][v2]; } for(i