您的位置:首页 > 其它

HDOJ  1874   畅通工程续

2015-12-18 18:08 323 查看
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874

开始学习最短路,感觉Dijkstra算法还挺好用的......

#include <stdio.h>

#define INF 10000000

#define MAXN 250

int n,m,beg,end;

int Edge[MAXN][MAXN];

int s[MAXN],dist[MAXN];

void Dijkstra(int v0)

{

int
i,j,k;


for(i=0;i<n;i++)

{


dist[i]=Edge[v0][i];


s[i]=0;

}


s[v0]=1;


dist[v0]=0;


for(i=0;i<n-1;i++)

{


int min=INF,u=v0;


for(j=0;j<n;j++)


{


if(!s[j]&&dist[j]<min)


{


u=j;


min=dist[j];


}


}


s[u]=1;


for(k=0;k<n;k++)


{


if(!s[k]&&Edge[u][k]<INF&&dist[u]+Edge[u][k]<dist[k])


{


dist[k]=dist[u]+Edge[u][k];


}


}

}

}

int main()

{

int
i,j;

int
u,v,w;


while(scanf("%d%d",&n,&m)!=EOF)

{


for(i=0;i<n;i++)


{


for(j=0;j<n;j++)


{


if(i==j)


Edge[i][j]=0;


else


Edge[i][j]=INF;


}


}


for(i=0;i<m;i++)


{


scanf("%d%d%d",&u,&v,&w);


if(w<Edge[u][v])


{


Edge[u][v]=w;


Edge[v][u]=w;


}


}


scanf("%d%d",&beg,&end);


Dijkstra(beg);


printf("%d\n",dist[end]!=INF?dist[end]:-1);

}

return
0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: