您的位置:首页 > 其它

HDU 2544

2013-08-23 09:34 741 查看

题目描述:

        HDU 2544

分析:

        Dijkstra算法的典型应用。

源码:

        
#include <stdio.h>
#include <limits.h>

//三个数组分别记录路线,最短距离,以及标志是否已经被扩展
int map[101][101], dist[101], s[101];
void dijkstra(int n, int x);

int main()
{
int n, m, a, b, c;
int i, j;
while (scanf("%d%d", &n, &m) != EOF)
{
if (n==0 && m==0)
break;

//初始化数组map
for (i = 1; i <= n; i ++)
{
for (j = 1; j <= n; j ++)
{
map[i][j] = INT_MAX;
}
}

//读取所有的边
for (i = 1; i <= m; i ++)
{
scanf("%d%d%d", &a, &b, &c);
map[a][b] = map[b][a] = c;
}

dijkstra(n, 1);

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

return 0;
}

void dijkstra(int n, int x)
{
//x表示源点,n表示终点
int mindis, u;
int i, j;
for (i = 1; i <= n; i ++)
{
dist[i] = map[x][i];
s[i] = 0;
}
//扩展源点
s[x] = 1;
for (i = 1; i < n; i ++)
{
mindis = INT_MAX;
u = -1;
//找出距离最小的点,然后扩展它
for (j = 1; j <= n; j ++)
{
if (!s[j] && dist[j] < mindis)
{
u = j;
mindis = dist[j];
}
}
s[u] = 1;
for (j = 1; j <= n; j ++)
{
if (s[j] == 0)
{
if (dist[u]+map[u][j] < dist[j] && map[u][j] < INT_MAX)
{
dist[j] = dist[u] + map[u][j];
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Dijkstra 图论 HDU 2544