- ์ด ๋ฌธ์ ๋ c++๋ก ํ์ด๋ฅผ ์์ฑํ์์ต๋๋ค.
๋ฌธ์
์์
ํ์ด
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int n,m;
int arr[100][100];
int result=987987987;
// dfs๋ฅผ ์ด์ฉํ์ฌ check๋ฐฐ์ด์ ์นํจ์ง ํ์
// ์ด๋ ๊ฒ 2์ฐจ์ ๋ฐฐ์ด๋ณด๋ค 1์ฐจ์ Node ๋ฐฐ์ด์ ๋ง๋๋ ๊ฒ์ด ์๊ฐ์ ์ค์ด๋ ๊ธธ์ด๋ค.
void dfs(int y,int x,bool check[100][100],int cnt){
if(cnt==m){
int total=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(arr[i][j]==1){
int sum=987987987;
for(int a=0;a<n;a++){
for(int b=0;b<n;b++){
if(check[a][b]){
int temp=abs(i-a)+abs(j-b);
sum=min(sum,temp);
}
}
}
total+=sum;
}
}
}
result=min(result,total);
}
else{
for(int i=y;i<n;i++){
for(int j=0;j<n;j++){
if(arr[i][j]==2 && !check[i][j]){
check[i][j]=1;
dfs(i,j,check,cnt+1);
check[i][j]=0;
}
}
}
}
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>arr[i][j];
}
}
bool check[100][100]={0};
dfs(0,0,check,0);
cout<<result;
}
- ์ถ๊ฐ๋ก ๊ถ๊ธํ ์ ์ด๋ ์์ ํ ๋ถ๋ถ ์์ผ๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์.