MDeath-Kid

- M I T & Y
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

hdu 1874

Posted on 2011-04-21 17:17  MDeath-Kid  阅读(269)  评论(0编辑  收藏  举报
/*ACMer:MDK
  HDU 1874
*/#include<iostream>
#include
<string.h>
#include
<stdio.h>
#include
<vector>
#include
<limits.h>
#define MAXN 250
const int INTMAX=0x7f7f7f7f;

using namespace std;

int mat[MAXN][MAXN],minl[MAXN];
void init()
{
memset(mat,
127,sizeof(mat));
memset(minl,
127,sizeof(minl));
}
int dijkstra(int a,int b,int d)
{
int n = a,i,j,k;
int v[MAXN] = {0};
for(minl[b]=0,i = 0;i<n;i++)
{
for(k=-1,j=0;j<n;j++)
if(!v[j]&&(k==-1||minl[j]<minl[k]))
k
=j;
for(v[k]=1,j=0;j<n;j++)
if(!v[j]&&(mat[k][j]!=INTMAX))
minl[j]
=min(minl[k]+mat[k][j],minl[j]);
}
if(minl[d]>=INTMAX) return -1;
else return minl[d];
}
int main()
{
freopen(
"d:\\1.txt","r",stdin);
int N,M;
while(scanf("%d%d",&N,&M)!=EOF)
{
init();
for(int i = 0;i<M;i++)
{
int a,b,x;
scanf(
"%d%d%d",&a,&b,&x);
if(x<mat[a][b]) //注意BT测试数据
mat[a][b]=mat[b][a]=x;
if(a==b) //注意a==b的情况
mat[a][a]=mat[b][b]=0;
}
int from,to;
cin
>>from>>to;
if(from==to) //注意BT测试源点和目的地相等的情况
printf("0\n");
else
printf(
"%d\n",dijkstra(N,from,to));
}
}
就这个简单的路径把最短路径的标准模板贴着,以后就用这个做最短路径题,有的模板居然是错的,很让我纠结!