单源最短路
和Floyd算法一样,仍然使用二维数组来存储顶点之间边的关系。
不同的是我们还要用一个一维数组dis来存储1号顶点到其余各个顶点的初始路程。我们将此时dis数组中的值称为最短路程的“估计值”。也就是贪心的思想。
首先把起点到所有点的距离存下来找到最短距离,然后松弛一次再找出最短的距离。松弛就是遍历一遍看通过刚刚找到的距离最短的点作为中转站会不会更近,如果更近了就更新距离。
基本代码如下:
#include<stdio.h>
#define max 9999999
int a[20][20];
int dis[1001],book[1001];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
int s,t;
int i,j,k;
for(i=0;i<n;i++)
{
book[i]=0;
dis[i]=max;
for(j=0;j<n;j++)
{
if(i==j)
a[i][j]=0;
else
a[i][j]=max;
}
}
int A,B,X;
for(i=0;i<m;i++)
{
scanf("%d%d%d",&A,&B,&X);
if(a[A][B]>X)