Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
1.3 kB
8
Indexable
#include <bits/stdc++.h>
using namespace std;
// #define int long long
#define pii pair<int, int>
vector<int> dp;  // dp[i]= min cost to reach b from city i ;
 
int dist(pii a , pii b ){
    return abs(a.first-b.first)+ abs(a.second - b.second);
}

int solve(int city , vector<int>&vis , int b, int k  ,vector<pii>town ){
    if(city <=k and b <=k)return 0;
    if(city==b)return 0;
    if(dp[city]!=-1)return dp[city];
    vis[city]=1;
    int mincost = INT_MAX;
    for(int i=1; i<town.size()+1 ;i++){
     if(vis[i]==0){
        int cost = dist(town[i-1],town[b-1])+ solve(i,vis,b,k,town );
        vis[i]=0;
        mincost = min(mincost , cost);
     }
    }

    return dp[city]= mincost ;

}


int32_t main() {
    int t;
    cin >> t;
    while (t--) {
        int n, k, a, b;
        cin >> n >> k >> a >> b;
    dp.resize(n+1 ,-1);  // i -> city number from 1 to n 
    vector<int>vis(n+1,0);  // i->city number 
    vector<pii> city;
        for (int i = 0; i < n; i++) {
            int x, y;
            cin >> x >> y;
            city.push_back({x, y});
        }
      int result =0;
        result = solve(a, vis ,b, k, city );
        cout << result << endl;
    }

    return 0;
}