首页 > 代码库 > 【单源最短路】dijstra poj 1502

【单源最短路】dijstra poj 1502

 

#include <cstdio>#include <iostream>#include <stdlib.h>#include <memory.h>using namespace std;const int maxn=102;const int inf=1<< 30;int s[maxn][maxn],dis[maxn],visit[maxn],n;void dijstra(){    memset(visit,0,sizeof(visit));    for(int i=1;i<=n;i++)    dis[i]=s[1][i];    for(int j=1;j<=n;j++)    {        int t=-1;        for(int i=1;i<=n;i++)        {            if(!visit[i] && (dis[i]<dis[t]||t==-1))            t=i;        }        visit[t]=1;        for(int i=1;i<=n;i++)        {            if(!visit[i] && s[i][t] && dis[i]>dis[t]+s[t][i])            dis[i]=dis[t]+s[t][i];        }    }}int main(){    //freopen("in.txt","r",stdin);    scanf("%d",&n);    for(int i=1;i<=n;i++)    s[i][i]=0;    for(int i=1;i<=n;i++)    {        for(int j=1;j<=i-1;j++)        {            char ch[20];            scanf("%s",ch);            if(ch[0]==x)s[j][i]=s[i][j]=inf;            else s[i][j]=s[j][i]=atoi(ch);        }    }    dijstra();    int ans=-1;    for(int i=1;i<=n;i++)    {        if(ans==-1 || dis[i]>ans)        ans=dis[i];    }    printf("%d",ans);    return 0;}

 

【单源最短路】dijstra poj 1502