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;
}