您的位置:首页 > 其它

HDOJ   2544   最短路

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

#include <stdio.h>

#define INF 10000000

#define MAXN
200
//数组一定要开大........

int n,m;

int Edge[MAXN][MAXN];

int s[MAXN],dist[MAXN];

void Dijkstra(int v0)

{

int
i,j,k;


for(i=1;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=1;j<=n;j++)


{


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


{


u=j;


min=dist[j];


}


}


s[u]=1;


for(k=1;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)

{


if(n==0&&m==0)


break;


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


{


for(j=1;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);


Edge[u][v]=w;


Edge[v][u]=w;


}


Dijkstra(1);


printf("%d\n",dist
);

}

return
0;

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