- ์ด ๋ฌธ์ ๋ c++๋ก ํ์ด๋ฅผ ์์ฑํ์์ต๋๋ค.
๋ฌธ์
์์
ํ์ด
#include <iostream>
#include <queue>
#include <utility>
using namespace std;
int result=0; // ์ต๋๊ฐ
int n,m;
int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; // ์ํ์ข์ฐ
// ์ฌ๊ฐํ ์์ ์๋์ง ํ๋จํ๋ ํจ์
bool inside(int y,int x){
return 0<=y && y<n && 0<=x && x<m;
}
// ๋ฒฝ 3๊ฐ๋ฅผ ์ธ์ฐ๊ธฐ ์ ๊น์ง๋ ๋ฐฑํธ๋ํน ๊ธฐ๋ฒ์ผ๋ก ํ์
// 3๊ฐ๋ฅผ ์ธ์ธ ์ dfs๋ก ๋ฐ์ด๋ฌ์ค๋ฅผ ํผ๋จ๋ฆฐ ํ check๋ฐฐ์ด๋ก ํผ์ง๊ณณ ํ์
// ์์ ํ ๊ณณ(0)์ด๋ฉด์ ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง์ง ์์ ๊ณณ ํ์
void dfs(int arr[8][8],int y,int x,int len,int cnt){
if(len==cnt){
int count=0;
int check[8][8]={0};
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(arr[i][j]==2){
queue<pair<int,int>> q;
q.push(make_pair(i,j));
while(!q.empty()){
pair<int,int> p=q.front();
int a=p.first;
int b=p.second;
q.pop();
for(int k=0;k<4;k++){
int da=a+dir[k][0];
int db=b+dir[k][1];
if(inside(da,db)){
if(arr[da][db]==0 && !check[da][db]){
q.push(make_pair(da,db));
check[da][db]=1;
}
}
}
}
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(arr[i][j]==0 && check[i][j]==0){
count++;
}
}
}
if(count>result){
result=count;
}
}
else{
for(int i=y;i<n;i++){
for(int j=0;j<m;j++){
if(arr[i][j]==0){
arr[i][j]=1;
dfs(arr,i,j,len,cnt+1);
arr[i][j]=0;
}
}
}
}
}
int main(){
cin>>n>>m;
int arr[8][8];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>arr[i][j];
}
}
dfs(arr,0,0,3,0);
cout<<result;
}
- ์ถ๊ฐ๋ก ๊ถ๊ธํ ์ ์ด๋ ์์ ํ ๋ถ๋ถ ์์ผ๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์.