/*dijkstra算法用来计算从一个点到其他
所有点的最短路径的算法,复杂度O(N2)。*/
void dijkstra(int s) //s是起点
{
memset(visit, false, sizeof(visit));
visit[s] = true;
for(int i =0;i<n;i++)
{
dist[i]=graph[s][i];
}
int index;
for(int i=1;i<n;i++)
{
int mincost=INF;
for(int j=0;j<n;j++)
{
if(!visit[j]&&dist[j]<mincost)
{
mincost=dist[j];
index=j;
}
}
visit[index]=true;
for(int j=0;j<n;j++)
{
if(!visit[j]&&dist[j]>dist[index]+graph[index][j])
{
dist[j]=dist[index]+graph[index][j];
}
}
}
}
/*
floyd算法是最简单的最短路径算法,可以计算图
中任意两点间的最短路径folyd算法的时间复杂度
是O(N3),如果是一个没有边权的图,把相连的两点
间的距离设为dist[i][j] = 1,不相连的两点设为
无穷大,用 floyd算法可以判断i,j两点是否有路径
相连。
*/
void floyd()
{
for(int k=0;k<n;k++) //作为循环中间点的k必须放在最外一层循环
for(int i =0;i<n;i++)
for(int j =0;j <n;j++)
if(dist[i][j]>dist[i][k]+dist[k][j])
dist[i][j =dist[i][k]+dist[k][j];//dist[i][j]得出的是i到j的最短路径
}