POJ 2387

it2022-05-08  16

//Dijkstra#include <iostream>#include <stdio.h>using namespace std;#define max 0x7fffffff    //设置图中的两点的距离为无穷大#define arraysize 2001int dis[arraysize][arraysize];bool final[arraysize];int d[arraysize];int T,N;void Dij(){ for(int i1=1;i1<N;++i1) {  d[i1] = dis[N][i1]; } d[N] = 0; final[N] = true; dis[N][N]=0; for(int i2=1;i2<N;++i2) {  int min = max;  int v = N;  for(int i4=1;i4<N;++i4)  {   if(!final[i4] && min>d[i4])   {    min = d[i4];    v = i4;   }  }  final[v]  =true;  for(int i3=1;i3<N;++i3)  {   if(!final[i3] && dis[v][i3]!=max) //此处判断是否不可达   {    if(d[v]+dis[v][i3]<d[i3])     d[i3] = d[v] + dis[v][i3];   }  } } cout<<d[1]<<endl;}int main(){ //freopen("1.txt","r",stdin); while(cin>>T>>N) {  for(int i1=1;i1<=N;i1++)         {              for(int j1=1;j1<=N;j1++)    dis[i1][j1] = max;   //初始化dis,将距离设为最大         }  memset(final,0,sizeof(final));  memset(d,0,sizeof(d));  int start,end,w;  for(int i=0;i<T;++i)  {   cin>>start>>end>>w;   if(w<dis[start][end])   //注此处一定要注意判断是否有重边   {    dis[start][end] = w;  //无向图    dis[end][start] = w;   }  }  Dij(); } //fclose(stdin); return 0;}

转载于:https://www.cnblogs.com/north_dragon/archive/2010/04/25/1720689.html

相关资源:数据结构—成绩单生成器

最新回复(0)