您的位置:首页 > 其它

POJ 2387 Til the Cows Come Home --最短路模板题

2014-03-16 22:47 411 查看
Dijkstra模板题,也可以用Floyd算法。

关于Dijkstra算法有两种写法,只有一点细节不同,思想是一样的。

写法1:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define Mod 1000000007
using namespace std;
#define N 1007

int mp

,n,m;
int dis
,vis
;

void Dijastra(int s)
{
int now;
int i,k;
dis[s] = 0;
for(i=1;i<=n;i++)
{
int mini = Mod;  //order 1
for(k=1;k<=n;k++)
{
if(dis[k] < mini && !vis[k])
{
now = k;
mini = dis[k];
}
}
vis[now] = 1;
for(k=1;k<=n;k++)  //order 2
{
if(mp[now][k] != Mod && dis[now] + mp[now][k] < dis[k])
dis[k] = dis[now] + mp[now][k];
}
}
}

int main()
{
int u,v,w,i,j;
while(scanf("%d%d",&m,&n)!=EOF)
{
for(i=1;i<=n;i++)
dis[i] = Mod;
dis[1] = 0;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
mp[i][j] = Mod;
mp[i][i] = 0;
}
while(m--)
{
scanf("%d%d%d",&u,&v,&w);
if(w < mp[u][v])
mp[u][v] = mp[v][u] = w;
}
memset(vis,0,sizeof(vis));
Dijastra(1);
printf("%d\n",dis
);
}
return 0;
}


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