使用邻接矩阵实现Dijkstra算法,c++
时间: 2024-03-05 19:50:40 浏览: 91
好的,以下是使用邻接矩阵实现Dijkstra算法的C++代码:
```c++
#include<bits/stdc++.h>
using namespace std;
int n,m,s; //n表示点数,m表示边数,s表示起点
int e[1010][1010],dis[1010],vis[1010]; //邻接矩阵e,dis记录最短距离,vis记录是否访问过
void Dijkstra()
{
for(int i=1;i<=n;i++) dis[i]=e[s][i];
dis[s]=0; vis[s]=1;
for(int i=1;i<n;i++)
{
int k=-1; //k表示未确定最短路的点中距离最小的点
for(int j=1;j<=n;j++)
{
if(!vis[j] && (k==-1 || dis[k]>dis[j]))
k=j;
}
vis[k]=1;
for(int j=1;j<=n;j++)
dis[j]=min(dis[j],dis[k]+e[k][j]);
}
}
int main()
{
scanf("%d%d%d",&n,&m,&s);
memset(e,0x3f,sizeof(e)); //邻接矩阵初始化为无穷大
for(int i=1;i<=m;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
e[u][v]=min(e[u][v],w);
}
Dijkstra();
for(int i=1;i<=n;i++)
printf("%d ",dis[i]);
return 0;
}
```
其中,邻接矩阵e的初始化为无穷大,是因为在Dijkstra算法中,如果点i到j没有边相连,则e[i][j]应该为无穷大。
阅读全文