您的位置:首页 > 其它

hdu 2544 最短路(水题,dijkstra)

2014-04-22 15:45 435 查看
小记:本想用dp来做,但是不晓得如何处理环,于是改用dijkstra了。 如果想看邻接表解决的可以参看我的这篇
《spfa+邻接表》

小记:裸dijkstra就可以过

代码:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <map>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>

using namespace std;

#define mst(a,b) memset(a,b,sizeof(a))
#define eps 10e-8

const int MAX_ = 110;
const int N = 100010;
const int INF = 0x7fffffff;

int dp[MAX_], mp[MAX_][MAX_];
bool vis[MAX_];
int n, m;

void dijkstra(int start)
{
for(int i = 1; i <= n; ++i){
dp[i] = INF;
vis[i] = 0;
}
queue<int >q;
q.push(start);
dp[start] = 0;

for(int i = 0; i < n; ++i){
int k, mmin = INF;
for(int j = 1; j <= n; ++j){
if(!vis[j] && dp[j] < mmin){
mmin = dp[j];
k = j;
}
}
vis[k ] = 1;

for(int j = 1; j <= n; ++j){
if(!vis[j] && mp[k][j] && dp[j] > dp[k] + mp[k][j]){
dp[j] = dp[k] + mp[k][j];
}
}
}
}

int main(){
int s, t, v;
while(scanf("%d%d",&n,&m),n||m){
mst(mp,0);
for(int i = 0; i < m; ++i){
scanf("%d%d%d",&s,&t,&v);
mp[s][t] = mp[t][s] = v;
}

dijkstra(1);

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