您的位置:首页 > 其它

hdu 1874 畅通工程续

2015-08-08 14:39 369 查看
最短路大概是模板题,不说了水一发,下附AC代码

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
#define INF 0x3f3f3f
using namespace std;
int maxn;
int n,m;
int vis[202];
int dis[202];
int start,theend;
int map[202][202];
void dijkstra()
{
int next;
int i,j,mindist;
memset(vis,0,sizeof(vis));
for( i=0 ;i<n;i++)
{
dis[i]=map[start][i];
}
vis[start]=1;
for(i=1 ; i<n ;i++)
{
mindist=INF;
for(j=0; j<n ;j++)
{
if(vis[j]==0&&mindist>dis[j])
{
mindist=dis[j];
next=j;
}
}
vis[next]=1;
if(mindist==10000000) break;
for(j=0;j<n;j++)
{
if(!vis[j]&&map[next][j]+dis[next]<dis[j])
{
dis[j]=map[next][j]+dis[next];
}
}

}
if(dis[theend]==INF)
{
printf("-1\n");
}
else
{
printf("%d\n",dis[theend]);
}
}
bool fin(int zz)
{
return zz<=maxn?true:false;
}
int main()
{

int city1,city2,step;
while(scanf("%d%d",&n,&m)!=EOF)
{
maxn=0;
for(int i = 0 ; i <= 200 ; i++)
{
for(int j = 0 ; j <= 200 ;j++)
{
if(i==j)map[i][j]=0;
else map[i][j]=INF;
}
}
while(m--)
{
scanf("%d%d%d",&city1,&city2,&step);
if(map[city1][city2]>step)
{
map[city1][city2]=step;
map[city2][city1]=step;
}
}
scanf("%d%d",&start,&theend);
dijkstra();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: