商店选址问题
ssl 1760
题目大意:
有一些点,在一个点上按医院,有一个值就是这个点到其他点的最短路之和,问这个值最小是多少
原题:
Description
给出一个城市的地图(用邻接矩阵表示),商店设在一点,使各个地方到商店距离之和最短。
Input
第一行为n(共有几个城市); N小于201
第二行至第n+1行为城市地图(用邻接矩阵表示);
Output
最短路径之和;
Sample Input
3
0 3 1
3 0 2
1 2 0
Sample Output
3
解题思路:
直接用邻接矩阵存,然后Floyed,再统计一下取最小就可以了
代码:
#include<cstdio>
using namespace std;
int n,sum,ans,f[205][205];
int main()
{scanf("%d",&n);for (int i=1;i<=n;++i)for (int j=1;j<=n;++j){scanf("%d",&f[i][j]);if (i!=j&&f[i][j]==0) f[i][j]=2147483647;//一个BUG}for (int k=1;k<=n;++k)for (int i=1;i<=n;++i)for (int j=1;j<=n;++j)if (f[i][k]+f[k][j]<f[i][j])//Floyedf[i][j]=f[i][k]+f[k][j];ans=2147483647;//预处理for (int i=1;i<=n;++i){sum=0;//清零for (int j=1;j<=n;++j)sum+=f[i][j];//统计if (sum<ans) ans=sum;//取最小}printf("%d",ans);
}