๋ฌธ์
์ฝ๋
#include <iostream>
#include <vector>
using namespace std;
int N, M , ans;
int map[6][6];
bool visited[6][6];
vector<pair<int,int>> coor[4] = { {{-1, 0 }, {0, 1}}, {{-1,0}, {0, -1}}, {{0, -1}, {1, 0}}, {{0, 1}, {1,0}} };
void backtracking(int x, int y, int sum){
ans = max(ans, sum);
if(y==M){
y = 0;
x++;
}
if(x==N) return;
if(!visited[x][y]){
for(int c = 0; c<4; c++){ // ๋ถ๋ฉ๋ ๋ง๋ค๊ณ ๋์ด๊ฐ๊ธฐ
int nx1 = x + coor[c][0].first;
int ny1 = y + coor[c][0].second;
int nx2 = x + coor[c][1].first;
int ny2 = y + coor[c][1].second;
if(nx1>=0 && nx2>=0 && nx1<N && nx2<N && ny1>=0 && ny2>=0 && ny1<M && ny2<M){
if(visited[nx1][ny1] || visited[nx2][ny2]) continue;
visited[nx1][ny1] = 1;
visited[nx2][ny2] = 1;
visited[x][y] = 1;
backtracking(x, y+1, sum + (map[x][y]*2) + map[nx1][ny1] + map[nx2][ny2]);
visited[x][y] = 0;
visited[nx1][ny1] = 0;
visited[nx2][ny2] = 0;
}
}
}
backtracking(x, y+1, sum); // ๋ถ๋ฉ๋ ๋ง๋ค์ง ์๊ณ ๋์ด๊ฐ๊ธฐ
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>N>>M;
for(int i=0; i<N; i++){
for(int k=0; k<M; k++){
cin>>map[i][k];
}
}
backtracking(0, 0, 0);
cout<<ans;
}
ํ์ด
๋ค์๊ณผ ๊ฐ์ ๋ฐฐ์ด์์ ์๋์ ๊ฐ์ด ใฑ๋ชจ์์ผ๋ก ๋ง๋ค ์ ์๋ ์๋์ ๋ค ๊ฐ์ง ๋ถ๋ฉ๋์ ๋ง๋ค์์ ๋์ ์ซ์์ ์ต๋ ํฉ์ ์ฐพ๋ ๋ฌธ์ ์ ๋๋ค.
ํด๋น ์นธ์ ๋ ธ๋์์ผ๋ก ์น ํด์ง ๋ถ๋ถ์ ์ค์ฌ์นธ์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ฉฐ, ํด๋น ์นธ์ ์ ์๊ฐ ๋๋ฐฐ๋ก ๋ํด์ง๊ฒ ๋ฉ๋๋ค.
์ด์ ์ ์ ๋ฌธ์ ์์ ์ฌ์ฉํ๋ ๋ฐฉ์์ฒ๋ผ ๋ฐฐ์ด์ ์์๋ (0,0) , (0,1), (0,2),..., (0,N), (1, 0)... (N , M) ๋ฐฉ์์ผ๋ก ์ ํํ๊ฒ ๊ตฌํํ์๊ณ , ๋ถ๋ฉ๋์ ๋ง๋๋ ๋ฐฉ๋ฒ์ bfs์ dfs ๋ฐฉํฅ ํ์ ๋ฌธ์ ์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ๋์ผํ๊ฒ ๊ตฌํํ์ต๋๋ค.
'Algorithm ๐ง๐ปโ๐ป > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค,c++] 3980๋ฒ - ์ ๋ฐ ๋ช ๋จ (0) | 2022.08.21 |
---|---|
[๋ฐฑ์ค,c++] 2580๋ฒ - ์ค๋์ฟ (0) | 2022.08.21 |
[๋ฐฑ์ค,c++] 2661๋ฒ - ์ข์์์ด (0) | 2022.08.21 |
[๋ฐฑ์ค,c++] 1174๋ฒ - ์ค์ด๋๋ ์ (0) | 2022.08.21 |
[๋ฐฑ์ค,c++] 14712๋ฒ - ๋ด๋ชจ๋ด๋ชจ (Easy) (0) | 2022.08.20 |
[๋ฐฑ์ค,c++] 16987๋ฒ - ๊ณ๋์ผ๋ก ๊ณ๋์น๊ธฐ (0) | 2022.08.20 |
๋๊ธ