wikioi p1077 多源最短路

来源:互联网 发布:好找工作的专业知乎 编辑:程序博客网 时间:2024/05/16 12:55

题目简单

邻接矩阵+dijkstra

#include<stdio.h>#include<iostream>#include<memory.h>#include<string.h>#include<stdlib.h>using namespace std;const int MAX_N=101;int r[MAX_N][MAX_N];int have[MAX_N];int d[MAX_N][MAX_N];int N;int M;int init(){    scanf("%d",&N);    int i,j;int d;    for (i=1;i<=N;i++)    for (j=1;j<=N;j++)    {        scanf("%d",&d);        r[i][j]=d;        r[j][i]=d;    }}int putD(){int i;int j;    for(i=1;i<=N;i++){    for(j=1;j<=N;j++)    printf("%d ",d[i][j]);    printf("\n");}} int DijkStra(){    int i,j,k,t;for (t=1;t<=N;t++)    {        memset(d[t],1,sizeof(d[t]));        d[t][t]=0;        //putD();        memset(have,0,sizeof(have));        for (i=1;i<=N;i++)        {        int j=1;        while (have[j]&&j<=N) j++;        if (j>N) break;for (k=j+1;k<=N;k++)        if (!have[k]&&d[t][k]<d[t][j]) j=k;        have[j]=1;        for (k=1;k<=N;k++)        if (!have[k]&&d[t][j]+r[j][k]<d[t][k])        d[t][k]=d[t][j]+r[j][k];        }    }}int put(){    scanf("%d",&M);    int i;    int s,t;    for (i=1;i<=M;i++)    {        scanf("%d %d",&s,&t);printf("%d\n",d[s][t]);    }}int main(){    init();    DijkStra();    put();    return 0;}


 

原创粉丝点击