最短路径

View Code 
#include <iostream>
using namespace std;

const int inf=999999999;

int N,E;
int dis[100];
bool used[100];
int map[100][100];

int dijk(int s,int e)
{
    memset(dis,255,sizeof(dis)); //初始化为-1,表示不可达
    memset(used,0,sizeof(used)); //均标记为未被访问
    
    dis[s]=0;
    used[s]=true;//标记s点
    
    int i,j;
    for(i=1;i<=N;i++)
    {
        if(i!=s)
        {
            if(map[s][i]!=-1)
                dis[i]=map[s][i]; //为dis数组赋值
        }
    }
    for(i=1;i<N;i++)
    {
        
        int next;
        int min=inf;
        for(j=1;j<=N;j++)
        {
            if(!used[j] && dis[j]!=-1 && dis[j]<min) //未访问 相邻点 距离近
            {
                min=dis[j];
                next=j;
            }
        }
        
        used[next]=true//加入
        
        for(j=1;j<=N;j++)
        {
            if(!used[j] && map[next][j]!=-1 && (dis[next]+map[next][j]<dis[j] || dis[j]==-1)) //未访问 相邻点 距离变近
            {
                dis[j]=dis[next]+map[next][j]; //修改
            }
        }
    }
    return dis[e];
}

int main()
{
    memset(map,255,sizeof(map));
    cin>>N>>E;
    int i;
    int s,t,d;
    for(i=0;i<E;i++)
    {
        cin>>s>>t>>d;
        map[s][t]=d;
        map[t][s]=d;
    }

    int start,end;
    while(cin>>start>>end)
        cout<<dijk(start,end)<<endl;
    return 0;

这是自己又一次写dijkstra算法了,希望能够渐渐熟练起来... 

posted on 2011-09-26 16:03  Knuth_档案  阅读(160)  评论(0编辑  收藏  举报

导航