1. 程式人生 > >HDU 2544 最短路(最短路/spfa)

HDU 2544 最短路(最短路/spfa)

題目:http://acm.hdu.edu.cn/showproblem.php?pid=2544

程式碼:

#include <stdio.h>
#include <queue>
using namespace std;

#define RANGE 101
#define MAX 0x3f3f3f3f
int cost[RANGE][RANGE];
int d[RANGE];
bool used[RANGE];
int n,m;

void spfa( int s )
{
  int i,now;
  // 初始化
  for( i=1;i<=n;++i )
  {
    d[i]=MAX;
    used[i]=false;
  }

  d[s]=0;
  queue <int> q;
  q.push(s);
  used[s] = true;

  while(!q.empty())
  {
    now = q.front();
    q.pop();
    used[now] = false;
    for(i = 1; i <= n; i++)
    {
      if(d[i] > d[now] + cost[now][i])
      {
        d[i] = d[now] + cost[now][i];
        if(used[i] == 0)
        {
          q.push(i);
          used[i] = true;
        }
      }
    }
  }
}

int main()
{
  int i,j,A,B,C;
  while( scanf("%d%d",&n,&m) )
  {
    if( !n && !m )  break;
    // 初始化
    for( i=1;i<=n;++i )
      for( j=1;j<=i;++j )
        if( i==j )  cost[i][j]=0;
        else	cost[i][j]=cost[j][i]=MAX;

    for( i=0;i<m;++i )
    {
      scanf("%d%d%d",&A,&B,&C);
      cost[A][B]=cost[B][A]=C;
    }

    spfa(1);
    printf("%d\n",d[n]);
  }
  return 0;
}