商店选址问题【SSL 1760】
2018-01-13 09:34
134 查看
题目
Description给出一个城市的地图(用邻接矩阵表示),商店设在一点,使各个地方到商店距离之和最短。
Input
第一行为n(共有几个城市); N小于201
第二行至第n+1行为城市地图(用邻接矩阵表示);
Output
最短路径之和;
Sample Input
3
0 3 1
3 0 2
1 2 0
Sample Output
3
解题思路
这是一道最短路径问题,求图的中心问题。代码
#include<cstdio> #include<iostream> #include<cstring> #define fo(i,a,b) for (int i=a;i<=b;i++) using namespace std; int n, minmax, a[201][201], d[201][201] , sum; int main() { minmax = 999999999; scanf("%d", &n); fo(i,1,n) fo(j,1,n) d[i][j]=99999999; fo(i, 1, n) fo(j, 1, n) { scanf("%d", &a[i][j]); if(a[i][j]==0&&i!=j) a[i][j]=99999999;//预处理 d[i][j]= a[i][j]; } fo(k, 1, n) fo(i, 1, n) fo(j, 1, n) if((d[i][k] + d[k][j] < d[i][j]))//Floyd算法 d[i][j] = d[i][k] + d[k][j]; fo(i, 1, n) { sum=0; fo(j, 1, n) sum+=d[i][j];//求每条路径和 if (sum<minmax) minmax=sum;//最短路径之和 } printf("%d", minmax); return 0; }
相关文章推荐