hdu_2544_路口最短距离_最短路_dijkstra

来源:互联网 发布:羊毛衫工艺软件 编辑:程序博客网 时间:2024/05/16 05:34

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2544

解题思路:题意已经非常明显了,这道题用来检测自己对最短路的理解和代码的熟悉程度,早起热身,一次AC。现在看来属于很水的题。

代码如下:

#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int maxn=1000;const int INF=9999999;int n,m;int map[maxn][maxn],dist[maxn];void dijkstra(int s,int e){    int visit[maxn];    int i,j,k;    int pos;    memset(visit,0,sizeof(visit));    visit[s]=1;    for(i=1;i<=n;i++) dist[i]=map[s][i];    for(i=1;i<=n;i++)    {        int min=INF;        for(j=1;j<=n;j++)        {            if(!visit[j]&&dist[j]<min)            {                pos=j;                min=dist[j];            }        }        visit[pos]=1;        for(j=1;j<=n;j++)        {            if(!visit[j]&&map[pos][j]!=INF)            {                int newdist=dist[pos]+map[pos][j];                if(newdist<dist[j]) dist[j]=newdist;            }        }    }}int main(void){    int i,j,k;    int a,b,c;    int s,e;    while(cin>>n>>m)    {        if(n==0||m==0) break;        //首先要对图进行初始化        for(i=1;i<=n;i++)            for(j=1;j<=n;j++)            map[i][j]=INF;        for(i=0;i<m;i++)        {            cin>>a>>b>>c;            if(c<map[a][b])                map[a][b]=map[b][a]=c;        }        dijkstra(1,n);        cout<<dist[n]<<endl;    }}

0 0
原创粉丝点击