#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define dbg(x) cout<<#x<<": "<<x<<endl;
#define endl '\n'
#define int long long
const int inf=LLONG_MAX;
void submit(int x){
cout<<"The shortest path has length "<<x<<endl;
}
int dis(pair<int,int> a,pair<int,int> b){
return abs(a.first-b.first)+abs(a.second-b.second);
}
vector<pair<int,int> > rec;
int cal(vector<int>&x){
int n=x.size()-1,sum=0;
for(int i=0;i<n;i++){
sum+=dis(rec[x[i]],rec[x[i+1]]);
}
sum+=dis(rec[x[n]],rec[0]);
return sum;
}
void solve(){
int tmp;cin>>tmp>>tmp;
int a,b;cin>>a>>b;
int n;cin>>n;
rec=vector<pair<int,int> >(n+1);
rec[0]={a,b};
for(int i=1;i<=n;i++)cin>>rec[i].first>>rec[i].second;
vector<int> ord(n+1);
for(int i=1;i<=n;i++)ord[i]=i;
int ans=inf;
do{
ans=min(ans,cal(ord));
}while(next_permutation(ord.begin()+1,ord.end()));
submit(ans);
}
signed main(){
IOS;
int t=1;
cin>>t;
while(t--)solve();
return 0;
}
枚举所有遍历点的顺序即可,这里给出一种简单的,进行全排列的方法

京公网安备 11010502036488号