您的位置:首页 > Web前端 > JavaScript

HDOJ 1874 畅通工程续(最短路 - dijsktra算法)

2014-10-19 00:53 375 查看
擦,没有判重边wa了两发。。

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <queue>
#include <algorithm>

using namespace std;

const int maxn = 1010;
const int inf = 0x3f3f3f3f;
bool vis[maxn];
int map[maxn][maxn];
int dis[maxn];
int n, m;

void dijkstra(int start)
{
dis[start] = 0;
int now, mindis;
for(int i = 0; i < n; i++)
{
mindis = inf;
for(int j = 0; j < n; j++)
{
if(!vis[j] && mindis > dis[j])
{
mindis = dis[j];
now = j;
}
}
if(mindis >= inf)
break;
vis[now] = true;
for(int j = 0; j < n; j++)
{
if(!vis[j] && dis[now] + map[now][j] < dis[j])
dis[j] = dis[now] + map[now][j];
}
}
}

int main()
{
#ifdef BellWind
freopen("1874.in", "r", stdin);
#endif // BellWind

while(~scanf("%d%d", &n, &m))
{
int a, b, cost;
int s, e;
memset(vis, false, sizeof(vis));
memset(map, 0x3f, sizeof(map));
memset(dis, 0x3f, sizeof(dis));
for(int i = 0; i < m; i++)
{
scanf("%d%d%d", &a, &b, &cost);
if(cost < map[a][b])
{
map[a][b] = cost;
map[b][a] = cost;
}
}
scanf("%d%d", &s, &e);
dijkstra(s);
if(dis[e] >= inf)
printf("-1\n");
else
printf("%d\n", dis[e]);
}

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