给出一个城市的地图(用邻接矩阵表示),商店设在一点,使各个地方到商店距离之和最短。
第一行为n(共有几个城市); N小于201
第二行至第n+1行为城市地图(用邻接矩阵表示);
最短路径之和;
3
0 3 1
3 0 2
1 2 0
输出:
3
我的代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define uint unsigned long long
#define speed ios::sync_with_stdio(0),cin.tie(0), cout.tie(0);
int n,a[201][201];
int dist[201],minx=INT_MAX;
bool f[201];
signed main() {
speed
cin>>n;
for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cin>>a[i][j],a[i][j]=(!a[i][j]?INT_MAX:a[i][j]);
for(int t=1;t<=n;t++){
for(int i=1;i<=n;i++)dist[i]=a[t][i];
dist[t]=0;
memset(f,0,sizeof(f));
f[t]=1;
for(int i=1;i<=n;i++){
int k=0,minn=INT_MAX;
for(int j=1;j<=n;j++)
if(!f[j]&&dist[j]<minn)minn=dist[j],k=j;
if(!k)break;
f[k]=1;
for(int j=1;j<=n;j++)
if(dist[j]>dist[k]+a[k][j])
dist[j]=dist[k]+a[k][j];
}
int ans=0;
for(int i=1;i<=n;i++)ans+=dist[i];
minx=min(minx,ans);
}
cout<<minx;
return 0;
}
样例正确五个点全 WA