最短单源路径之dijkstra算法

来源:互联网 发布:网络键盘侠 编辑:程序博客网 时间:2024/05/16 17:07
#include<cstdio>#include<cstring>#include<iostream>#define MAX 999using namespace std;int dis[MAX];int n,m;int d[MAX][MAX];int Min,flag;bool vis[MAX];int dijkstra(){    for(int i=1; i<=n; ++i)    {        if(d[m][n]!=MAX)            dis[i]=d[m][i];        else            dis[i]=MAX;        dis[m]=0;    }    for(int i=1; i<=n; ++i)    {        //查找最近点        Min=MAX+1;        for(int j=1; j<=n; ++j)            if(j!=m && dis[j]<Min && (!vis[j]))                Min=dis[j],flag=j;        for(int j=1; j<=n; ++j)            if(j!=m)            {                if(dis[j]>dis[flag]+d[flag][j])                    dis[j]=dis[flag]+d[flag][j];            }        vis[flag]=true;    }}int main(){    while(cin>>n)    {        for(int i=1; i<n; ++i)            for(int j=i+1; j<=n; ++j)            {                cout<<"d["<<i<<"]["<<j<<"]"<<endl;                cin>>d[i][j];                d[j][i]=d[i][j];                if(d[i][j] == 0 || d[i][j] > MAX)                    d[i][j]=d[j][i]=MAX;            }        for(int i=1; i<=n; ++i)            d[i][i]=0;        cout<<"m"<<endl;        cin>>m;        if(m<1)            m=1;        if(m>n)            m=n;        dijkstra();        for(int i=1; i<=n; ++i)            cout<<dis[i]<<" ";        cout<<endl;    }}



dijkstra算法是求最短单源路径的一种算法


原创粉丝点击