您的位置:首页 > 其它

pku 1502 MPI Maelstrom

2011-06-26 11:38 232 查看
题意:有N个处理器,要传递信息,从1号开始,传播一次后可以从这两台处理器同时进行传播,以此类推

思路:样例画了个图,发现从1开始走到每个点的时候都是1到此点的最短路径,于是想到了spfa算1到每个点的距离,然后取最大值即可

code:

#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#include <string>
#include <cstdlib>
#define MAXN 105
#define INF 0x7fffffff
using namespace std;
int map[MAXN][MAXN];
int Max, n;
void spfa(int s, int e)    //spfa模板
{
int i;
int dist[MAXN];
int visited[MAXN];
queue<int> q;

memset(visited, 0, sizeof(visited));
for(i=1; i<=n; i++)
dist[i]=INF;
dist[s]=0;
visited[s]=1;
q.push(s);

while(!q.empty())
{
int x = q.front();
q.pop();
visited[x] = 0;

for(i=1; i<=n; i++)
if(dist[x]+map[x][i]<dist[i] && dist[x]!=INF && map[x][i]!=INF)
{
dist[i]=dist[x]+map[x][i];
if(!visited[i])
{
visited[i]=1;
q.push(i);
}
}
}
Max=Max>dist[e]?Max:dist[e];
}
int main()
{
scanf("%d", &n);
Max=0;
memset(map, 0, sizeof(map));
for(int i=2; i<=n; i++)
{
for(int j=1; j<i; j++)
{
char lengh[10];
int value;
scanf("%s", lengh);
if(lengh[0]=='x') value=INF;
else value=atoi(lengh);
map[i][j]=map[j][i]=value;
}
}
for(int i=2; i<=n; i++)
{
spfa(1,i);
}
printf("%d\n", Max);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: