/**
题目大意:N个处理器要进行信息传递,处理器i传递信息给自己不需要时间,处理器i与处理器j之间相互传递信息的时间是一样的,
不同处理器之间传递信息所需要的时间由一个矩阵的下三角给出。
若矩阵对应位置为x,则说明相应的两个处理器之间无法传递信息。
求从第一个处理器传递信息到其他所有处理器最少需要多少时间。
最少需要多少时间 那么就是看1-n最长的那个需要多少时间;
*/
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
using namespace std;
const int inf=1e7+7;
const int maxn1=1e3+7;
int n,dis[maxn1],mmp[maxn1][maxn1];
bool vis[maxn1];
void SPFA()
{
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
{
dis[i]=inf;
vis[i]=0;
}
queue<int>Q;
Q.push(1);
dis[1]=0;
vis[1]=1;
while(!Q.empty())
{
int k=Q.front();
Q.pop();
vis[k]=0;
for(int i=1;i<=n;i++)
{
if(dis[k]+mmp[k][i]<dis[i])
{
dis[i]=dis[k]+mmp[k][i];
if(!vis[i]){Q.push(i);vis[i]=1;}
}
}
}
}
int main ()
{
while(~scanf("%d",&n))
{
for(int i=0;i<=n;i++)
for(int j=0;j<=n;j++)
if(i==j) mmp[i][j]=0;
else mmp[i][j]=inf;
for(int i=1;i<=n;i++)
{
for(int j=1;j<i;j++)
{
char str[10];
scanf("%s",str);
if(str[0]!='x') mmp[i][j]=mmp[j][i]=atoi(str);///字符强制转换为数据;
}
}
SPFA();
int ans=-1;
for(int i=2;i<=n;i++)
ans=max(ans,dis[i]);
printf("%d\n",ans);
}
return 0;
}
POJ - 1502 SPFA
最新推荐文章于 2019-05-11 23:06:00 发布