读书人

几个最短路算法

发布时间: 2012-09-21 15:47:26 作者: rapoo

几个最短路算法。
http://acm.hdu.edu.cn/showproblem.php?pid=2544
大水题一枚,仅以练手。
Dijkstra:

#include<iostream>using namespace std;#include<queue>#define N 110#define INF 0xfffffffint vis[N];int map[N][N];int d[N];void spfa(int s,int n){    memset(vis,0,sizeof(vis));    memset(d,127,sizeof(d));    d[s] = 0;    vis[s] = 1;    queue<int> q;    q.push(s);    while(!q.empty())    {       int v = q.front();       q.pop();       vis[v] = 0;       for(int i=0;i<n;i++)       {          if(map[v][i])          {              if(map[v][i]+d[v]<d[i])              {                 d[i] = map[v][i]+d[v];                 if(!vis[i])                 {                    vis[i] = 1;                    q.push(i);                 }              }          }       }    }}int main(){    int n,m;    while(cin>>n>>m,n||m)    {        memset(map,0,sizeof(map));        for(int i=0;i<m;i++)        {           int a,b,c;           cin>>a>>b>>c;           a--,b--;           if(map[a][b]==0||map[a][b]>c)           map[a][b] = map[b][a] = c;        }                         spfa(0,n);        cout<<d[n-1]<<endl;    }        return 0;}

读书人网 >编程

热点推荐