标签:
5 50 30 5 100 20 50 10 x x 10
35
N个处理器要进行信息传递,处理器i传递信息给自己不需要时间,处理器i与处理器j之间相互传递信息的时间是一样的,不同处理器之间传递信息所需要的时间由一个矩阵的下三角给出。若矩阵对应位置为x,则说明相应的两个处理器之间无法传递信息。求从第一个处理器传递信息到其他所有处理器最少需要多少时间。
最短路。
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #define inf 0x7f7f7f #define N 210 using namespace std; struct edge_node { int to,next,w; }e[N*N]; int head[N]; int dist[N]; bool flag[N]; int cnt,n,ans; void ins(int u,int v,int w) { e[++cnt].to = v; e[cnt].next = head[u]; e[cnt].w = w; head[u] = cnt; } void dij() { for (int i=1;i<n;i++) { int u = 0; for (int j=1;j<=n;j++) if (!flag[j] && dist[j]<dist[u]) u = j; flag[u] = true; for (int j=head[u];j;j=e[j].next) { int v = e[j].to; dist[v] = min(dist[v],dist[u]+e[j].w); } } } int main() { char w[100]; scanf("%d",&n); for (int i=2;i<=n;i++) { for (int j=1;j<i;j++) { scanf("%s",&w); if (w[0] == ‘x‘) { ins(i,j,inf); ins(j,i,inf); } else { int w2 = atoi(w); ins(i,j,w2); ins(j,i,w2); } } } memset(dist,127/3,sizeof(dist)); dist[1] = 0; dij(); for (int i=1;i<=n;i++) ans = max(ans,dist[i]); printf("%d",ans); }
标签:
原文地址:http://www.cnblogs.com/liumengyue/p/5495454.html