第一发最短路。。。dijkstra…渣渣代码一次ac….以后要继续练习
#include<stdio.h>
#define max 10000000
int a,b,m,s,t,i,j,k,n,x;
int dis[500],c[500][500];
void dijkstra(int star,int end,int c[500][500],int dis[])
{
int w[500]={0},v=-1;
dis[star]=0;
for(i=0;i<n;i++)
{
if(c[star][i]!=max)
dis[i]=dis[star]+c[star][i];
}
w[star]=1;
for(i=1;i<n;i++)
{
int tem=max;
for(j=0;j<n;j++)
{
if(w[j]==0&&dis[j]<tem)
{
tem=dis[j];
v=j;
}
}
if(v!=-1)w[v]=1;
for(j=0;j<n;j++)
{
if(dis[j]>dis[v]+c[v][j])
dis[j]=dis[v]+c[v][j];
}
}
if(dis[end]==max)printf("-1\n");
else printf("%d\n",dis[end]);
}
int main()
{
while(scanf("%d %d",&n,&m)!=EOF)
{
for(i=0;i<n;i++)
dis[i]=max;
for(i=0;i<n;i++)
for(k=0;k<n;k++)
c[i][k]=max;
for(i=0;i<m;i++)
{
scanf("%d %d %d",&a,&b,&x);
if(c[a][b]>x){
c[a][b]=x;
c[b][a]=x;
}
}
scanf("%d %d",&s,&t);
dijkstra(s,t,c,dis);
}
return 0;
}