本题的大意是有N个处理器,任何两个处理器之间的传输信息是需要时间的,有的处理器之间不能传输信息,给出一个处理器传输信息时间的二维矩阵的下三角,X表示不能传输,问从第一个处理器传输到所有处理器所需要的总时间。
本地是典型的DIJKSTRA水题,注意输入时需要用字符串输入,程序如下:
#include<stdio.h> #include<stdlib.h> #include<string.h> const int maxn=110,maxint=1000000000; int a[maxn][maxn],d[maxn],p[maxn]; char s[20],c; int main(){ int i,j,k,l,m,n; scanf("%d",&n); for(i=2;i<=n;i++) for(j=1;j<i;j++){ scanf("%s",&s); if(s[0]=='x'){ a[i][j]=0; a[j][i]=0; c=getchar(); continue; } m=0; l=strlen(s); for(k=0;k<l;k++){ m=m*10+s[k]-'0'; } a[i][j]=m; a[j][i]=m; c=getchar(); } for(i=1;i<=n;i++)d[i]=maxint; d[1]=0; int ans=0,mind; for(i=1;i<=n;i++){ mind=maxint; for(j=1;j<=n;j++) if(!p[j] && d[j]<mind){ mind=d[j]; k=j; } p[k]=1; ans=d[k]>ans?d[k]:ans; for(j=1;j<=n;j++) if(!p[j] && a[k][j] && d[j]>d[k]+a[k][j]) d[j]=d[k]+a[k][j]; } printf("%d ",ans); return 0; }