p1125_floyd
来源:互联网 发布:怎么才能做淘宝直播 编辑:程序博客网 时间:2024/05/19 17:26
挺水的题,不过解题蛮巧妙,如果没这样想的话可能会挺麻烦
用floyd求出两个点之间的最小距后,判断从每一个点i到所有其他的点的最大值,这个值就是从i开始所需要的时间,判断哪个点时间最短就可以了
#include <iostream>
#include <string.h>
#include <stdio.h>
#define inf 10000
using namespace std;
int n,maxend,iend;
int map[inf][inf];
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&&map[i][j]>map[i][k]+map[k][j])
map[i][j]=map[i][k]+map[k][j];
}
}
}
}
void getResult()
{
maxend=inf;
for(int i=1;i<=n;i++)
{
int fals=0,max=0;
for(int j=1;j<=n;j++)
{
if(map[i][j]==inf)
{
fals=1;
break;
}
if(map[i][j]>max)
max=map[i][j];
}
if(fals==1)
continue;
if(max<maxend)
{
maxend=max;
iend=i;
}
}
}
int main()
{
int m,k,v;
while(scanf("%d",&n)&&n!=0)
{
for(int i=0;i<=n;i++)
for(int j=0;j<=n;j++)
{
map[i][j]=inf;
if(i==j)
map[i][j]=0;
}
for(int i=1;i<=n;i++)
{
scanf("%d",&m);
for(int j=1;j<=m;j++)
{
scanf("%d %d",&k,&v);
map[i][k]=v;
}
}
floyd();
getResult();
printf("%d %d\n",iend,maxend);
}
//cout << "Hello world!" << endl;
return 0;
}
/*
3
2 2 4 3 5
2 1 2 3 6
2 1 2 2 2
*/
- p1125_floyd
- 【计算机视觉】opencv姿态解算7 四大坐标系,摄像机线性模型, 畸变模型
- Hadoop基础教程-第1章 环境安装配置(1.4 CentOS 基本配置)
- spring学习之简介helloword
- 05-树8 File Transfer (25分)
- 欢迎使用CSDN-markdown编辑器
- p1125_floyd
- 支付宝支付-刷卡支付(条码支付)详解
- JavaScript对象直接量3种创建对象方式
- 设置Android studio出现的问题
- js实现留言板
- PLC闪烁电路的实现
- 项目进度(二)
- Linux7 下Hadoop集群用户管理方案之二 CDH5.9.0版本安装配置
- 项目更换jdk时不能保存,报错 Could not write file