void Dijkstra(MGraph g,int v) { //求从v到其他顶点的最短路径 /********** Begin **********/ /********** End **********/ }补全代码
时间: 2023-06-29 07:04:05 浏览: 115
这里是 Dijkstra 算法的实现,可以用于求从顶点 v 到其他顶点的最短路径。
```c++
#include<iostream>
#include<cstring>
using namespace std;
#define MAXV 1000 //最大顶点数
#define INF 0x3f3f3f //无穷大
typedef struct{ //邻接矩阵结构体
int vexs[MAXV]; //顶点集合
int arcs[MAXV][MAXV]; //邻接矩阵
int n,e; //顶点数和边数
}MGraph;
void Dijkstra(MGraph g,int v)
{
int dist[MAXV],flag[MAXV],pre[MAXV];
memset(flag,0,sizeof(flag));
memset(pre,-1,sizeof(pre));
for(int i=0;i<g.n;i++) dist[i]=g.arcs[v][i];
dist[v]=0;
flag[v]=1;
for(int i=1;i<g.n;i++)
{
int min=INF,u=v;
for(int j=0;j<g.n;j++)
if(!flag[j]&&dist[j]<min) {min=dist[j];u=j;}
flag[u]=1;
for(int j=0;j<g.n;j++)
if(!flag[j]&&g.arcs[u][j]<INF&&dist[u]+g.arcs[u][j]<dist[j])
{
dist[j]=dist[u]+g.arcs[u][j];
pre[j]=u;
}
}
for(int i=0;i<g.n;i++)
{
if(i==v) continue;
cout<<"从顶点"<<g.vexs[v]<<"到顶点"<<g.vexs[i]<<"的最短距离为:"<<dist[i]<<endl;
}
}
```
其中,MGraph 是邻接矩阵结构体,包含顶点集合和邻接矩阵,n 表示顶点数,e 表示边数。Dijkstra 函数中,dist 数组表示从顶点 v 到各个顶点的最短距离,flag 数组表示该顶点是否已求出最短路径,pre 数组表示从顶点 v 到该顶点的路径上的前一个顶点。
在函数中,首先初始化 dist 数组为从顶点 v 到各个顶点的距离,将顶点 v 标记为已求出最短路径,并遍历其余 n-1 个顶点,每次找出距离顶点 v 最近的未标记顶点 u,并将其标记为已求出最短路径。然后,根据顶点 u 更新其他未标记顶点的最短路径,并记录路径上的前一个顶点。最后,输出从顶点 v 到各个顶点的最短距离。
阅读全文