PS(구 C++)

백준 15686 치킨배달 C++

같이긍뱅와 2022. 2. 4. 20:32
#include<bits/stdc++.h>
#define MAX 50
using namespace std;
typedef pair<int, int> pii;
int n, m, chickNum, ans = INT_MAX;
int Map[MAX][MAX];
bool chk[14];
vector<pii> house, chick, v;
int calcDis(){
    int sum = 0;
    int x, y, d, xx, yy, dist;
    for(int i = 0; i < house.size(); i++){
        x = house[i].first;
        y = house[i].second;
        d = INT_MAX;
        for(int j = 0; j < v.size(); j++){
            xx = v[j].first;
            yy = v[j].second;
            dist = abs(xx-x) + abs(yy-y);
            d = min(d, dist);
        }
        sum += d;
    }
    return sum;
}

void DFS(int idx, int cnt){
    if(cnt == m){
        ans = min(ans, calcDis());
        return;
    }
    for(int i = idx; i < chickNum; i++){
        if(chk[i]) continue;
        chk[i] = true;
        v.emplace_back(chick[i]);
        DFS(i+1, cnt+1);
        chk[i] = false;
        v.pop_back();
    }
}
int main(void){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n >> m;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            cin >> Map[i][j];
            if(Map[i][j]==1) house.emplace_back(i, j);
            if(Map[i][j]==2) chick.emplace_back(i, j);
        }
    }
    chickNum = chick.size();
    DFS(0, 0);
    cout << ans;
}