문제:https://www.acmicpc.net/problem/3109
1)문제분류
-DFS
-백트레킹
-그리디
2)문제해결
-각 (0~R,0)에서 dfs를 돌면서, 마지막 열 (0,C-1)만날때 +1을 한다.
- dfs에서 빵집을 연결하든 안하든,탐색한 chk[][]를 false로 안바꾸는 이유는
- 어차피 그 다음 탐색 시에 그 chk[][] 지점으로 가도 결과는 같기때문에 또 다시 두번 갈 필요가 없다!
//12시 50분 ~1시 20분
#include<iostream>
using namespace std;
char map[10002][502];
bool chk[10002][502];
int R, C;
int xrr[3] = { -1,0,1 };
int yrr[3] = { 1,1,1 };
int dfs(int x,int y)
{
if (y == C - 1)return 1;
for (int i = 0; i < 3; i++)
{
int curx = x + xrr[i];
int cury = y + yrr[i];
if (curx >= 0 && curx < R && cury >= 0 && cury <C&& chk[curx][cury] == 0 && map[curx][cury] == '.')
{
chk[curx][cury] = 1;
if (dfs(curx, cury))
{
return 1;
}
}
}
return 0;
}
int main()
{
scanf("%d %d", &R, &C);
for (int i = 0; i < R; i++)
{
for (int j = 0; j < C; j++)
{
cin >> map[i][j];
}
}
int ans = 0;
for (int i = 0; i < R; i++)
{
ans+=dfs(i,0);
}
cout << ans << endl;
}
'알고리즘문제풀이' 카테고리의 다른 글
[백준 16956]늑대와 양 (0) | 2019.02.19 |
---|---|
[백준 1173]운동 (0) | 2019.02.19 |
[백준 1389]케빈 베이컨의 6단계 법칙 (0) | 2019.02.19 |
[백준 16930]달리기 (0) | 2019.02.14 |
[백준 16929] Two Dots (0) | 2019.02.14 |