迪杰斯特拉的自我理解代码

#include
#define N 1005
#define inf 1<<20
int dist[N],dis[N][N];
int book[N];
int u,v;
int n,m;
int t,t1,t2;
void input()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j) dis[i][j]=0;
else dis[i][j]=inf; 
}
}
for(int i=1;i<=m;i++)
{
scanf("%d %d %d",&t1,&t2,&t);
dis[t1][t2]=t;
dis[t2][t1]=t;
}
for(int i=1;i<=n;i++)
{
dist[i]=dis[1][i];
}
}
void dijkstra(int n)
{
book[1]=1;
int p;
for(int i=1;i<=n;i++)
{
int temp=inf;// 一定注意,写到里面!!!! 
for(int j=1;j<=n;j++)
{
if(!book[j]&&dist[j] {
p=j;
temp=dist[j];
}
}
book[p]=1;
for(int k=1;k<=n;k++)
{
if(dis[p][k] {
if(dist[k]>dist[p]+dis[p][k])
{
dist[k]=dist[p]+dis[p][k];
}
}
}
}
}
int main()
{
scanf("%d %d",&n,&m);
input();
dijkstra(n);
for(int i=1;i<=n;i++)
{
printf("%d ",dist[i]);
}

你可能感兴趣的:(数据结构艰辛的路程)