poj1125--Floyd
2024-08-24 16:33:35
题解:
有N个股票经济人能够互相传递消息。他们之间存在一些单向的通信路径。如今有一个消息要由某个人開始传递给其它全部人。问应该由哪一个人来传递,才干在最短时间内让全部人都接收到消息。
显然,用Floyd算法,然后选出每一个点到其它点的最长距离其中的最短距离。
/** \brief poj 1125 Floyd
*
* \param date 2014/7/31
* \param state AC
* \return memory 756k time 0ms
*
*/ #include <iostream>
#include <fstream>
#include <cstring> using namespace std; const int MAXN=101;
int DistMap[MAXN][MAXN];
int n;
const int INF=20;
//int best;
//int num; //bool Floyd()
void Floyd()
{
for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i!=j && DistMap[i][j]>DistMap[i][k]+DistMap[k][j])
DistMap[i][j]=DistMap[i][k]+DistMap[k][j];
}
}
}
//
int maxlength, min_in_max=INF,flag_source;
for(int i=1;i<=n;i++)//以i点作为各通路源点
{
maxlength=0;
for(int j=1;j<=n;j++)
{
if(i!=j && DistMap[i][j]>maxlength)//寻找i到j的最长路径
{
maxlength=DistMap[i][j];
}
}
if(min_in_max>maxlength)
{
min_in_max=maxlength;//寻找最长路径中的最短路
flag_source=i;
}
} /*Output*/
if(min_in_max<INF)
cout<<flag_source<<' '<<min_in_max<<endl;
else
cout<<"disjoint"<<endl;
} int main()
{
//cout << "Hello world!" << endl;
//freopen("input.txt","r",stdin);
while(scanf("%d",&n)!=EOF)
{
memset(DistMap,INF,sizeof(DistMap));
if(n==0)break;
int num,v,w;
for(int i=1;i<=n;i++)
{
cin>>num;
for(int j=0;j<num;j++)
{
//DistMap[][]
scanf("%d%d",&v,&w);
DistMap[i][v]=w;
}
}
//Floyd
//if(Floyd()==false)
// cout<<"disjoint"<<endl;
//else cout<<num<<" "<<best<<endl;
Floyd();
}
return 0;
}
最新文章
- chattr无法删除某个文件
- 我与solr(三)--solr后台相关介绍
- JQuery EasyUI validatebox(验证框)
- json学习小记
- .NET破解之100%营销QQ辅助软件【更新】
- RAC 安装完成后 节点间通信不依赖于SSH
- java利用反射调用类的某个方法
- 程序集引用异常 处理 app.config内控制runtime运行时应用的程序集版本指向 assemblyBinding结点 bindingRedirect
- How to fix Column &#39;InvariantName&#39; is constrained to be unique 解决办法!
- CA认证和颁发吊销证书
- Linux下select的用法--实现一个简单的回射服务器程序
- python的加、减、乘、除、取整、取余计算
- Shell中判断语句if中-z至-d的意思
- TCP/IP协议(一)网络基础知识 网络七层协议
- C++ 提取网页内容系列之二
- Matlab 随机数字
- mysql中innodb和myisam的区别
- DCDC纹波小实验
- 【UVALive】2965 Jurassic Remains(中途相遇法)
- 用C#连接SFTP服务器并进行上传下载文件