最短路的Dijkstra朴素算法

HDU2544

#include <algorithm>
#include <functional>
#define MAX 200
#define INF 1<<30
using namespace std;

int n,m,s,e;
int path[MAX][MAX];
int dist[MAX];
bool vis[MAX];

int main()
{
    while(scanf("%d%d",&n,&m)!=EOF && (n+m)) 
    {
        memset(path,0,sizeof(path));
        memset(vis,true,sizeof(vis));
        for(int i=1;i<=n;i++)
        {
            dist[i]=INF;
        }
        for(int i=0;i<m;i++)
        {
            int a,b,x;
            scanf("%d%d%d",&a,&b,&x);
            path[a][b]=path[b][a]=x;
        }
        //scanf("%d%d",&s,&e);
        dist[1]=0;
        for(int i=0;i<=n;i++)
        {
            int x,m=INF;
            for(int j=0;j<=n;j++)
            {
                if(vis[j] && dist[j]<=m)
                {
                    m=dist[j];
                    x=j;
                }
            }
            vis[x]=false;
            for(int j=0;j<=n;j++)
            {
                if(path[x][j])
                {
                    dist[j]<?=path[x][j]+dist[x];
                }
            }
        }
        printf("%d\n",dist[n]);
    } 
    return 0;
}
posted @ 2012-07-10 11:12  Eslizn  阅读(167)  评论(0编辑  收藏  举报