dijkstra算法不能解决含负权边的图,适用于稠密图,和顶点密切相关,时间复杂度,为O(N2),这个是使用邻接矩阵实现的,当点的数量过多时,该方法的空间复杂度会非常高,甚至会爆栈。
#include
using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 1e3+5;
int n,m,k;
int a[N][N],dis[N],b[N];
void dijkstra()
{
memset(dis,0x3f,sizeof dis);//dis数组初始化
dis[k]=0;
for (int i=1;i
int minn = INF,u;
for (int j=1;j<=n;j++)//找到目前结点k所到各个点的最短的边
{
if(b[j]==0&&dis[j]
minn=dis[j];
u=j;
}
}
b[u]=1; //将找到的点一一标记
for (int v=1;v<=n;v++) //对找到的点进行扩展
{
if(a[u][v]
}
}
}
int main ()
{
cin>>n>>m>>k;
memset(a,0x3f,sizeof a);
for(int i=1;i<=n;i++)
a[i][i]=0;
for (int i=1;i<=m;i++)
{
int u,v,w;
cin>>u>>v>>w;
a[u][v]=min(a[u][v],w);
}
dijkstra();
for (int i=1;i<=n;i++)
cout<
}