์ ์ด๋ฒ์ ๋ฐ๋ก ํ์ง ์๊ณ ์ด๋ป๊ฒ ํ์ด์ผ ํ ์ง ์๊ฐํด๋ณด๊ณ ํ์ด์ผ๊ฒ ๋ค.
์ฌ์ค ๋ ์๊ณ ๋ฆฌ์ฆ ํ ๋ ์ ๋ค ์๊ฐ๋ฆฌ๊ณ ๋ฌด์์ ์ฝ๋์ง๋ ๋ฒ๋ฆ์ด ์๋๋ฐ ์ ์ข์..๋ฒ๋ฆ์ด๋ค..
์ฐ์ ์ ํ ์คํธ ์ผ์ด์ค ๊ฐ์ ์ ๋ ฅ๋ฐ๊ณ ์ ๋ ฅ๋ฐ์๋งํผ ํจ์๋ฅผ ๋ฐ๋ณตํด ์ค ๊ฒ์ด๋ค.
int main() {
int T;
int i;
scanf("%d", &T);
for (i = 0; i < T; i++) {
func();
}
}
๋์ถฉ ๋ญ ์ด๋ฐ์์ผ๋ก!
๊ทธ๋ฐ ๋ค์์ ์ด์ ๋ชจ๋ ! ์ฒ๋ฆฌ๋ func() ์ด๋ผ๋ ํจ์์์ ์ฒ๋ฆฌํ๊ฒ ๋ ๊ฒ์ด๋ค.
์ฐ์ M, N, K๋ฅผ ์ ๋ ฅ๋ฐ์์ผ๊ฒ ์ง? ๊ทธ๋ฆฌ๊ณ map์ ๋ณด๋ฅผ ์ ์ฅํ map[50][50]์ด๋ผ๋ ๋ฐฐ์ด๋ ์ ์ธํด์ผ ํ ๊ฒ์ด๋ค.
๊ทธ๋ฐ ๋ค์์ ์ด์ K๋ฒ๋งํผ for๋ฌธ์ ๋๋ ค์ ๋ฐฐ์ถ์ ์์น๋ฅผ map์ ์ ์ฅํ ๊ฒ์ด๋ค.
void func() {
int M, N, K;
int i, tmpx, tmpy;
int map[50][50] = { 0, };
scanf("%d %d %d", &N, &M, &K);
for (i = 0; i < K; i++) {
scanf("%d %d", &tmpx, &tmpy);
map[tmpx][tmpy] = 1;
}
}
์ด๋ก์จ ์ด์ ๋งต์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ฑด ๋์ด ๋ฌ๋ค. ์ด์ ๋ฌธ์ ์ ํต์ฌํฌ์ธํธ. ๋ญ์ณ์๋ ๋ฐฐ์ถ์ ๋ฌด๋ฆฌ์ ๊ฐ์๋ฅผ ์ธ์ผ ํ๋ค.
์ด๋ป๊ฒ ๊ตฌํํ ์ง ์๊ฐํด๋ดค๋๋ฐ, ๋จผ์ ๊ฐ๋ก๋ก ํ ์นธ์ฉ ์ด๋ํ๋ค. ์๋ฅผ ๋ค์ด๋ณด์.
1 1 0
1 0 0
0 0 0
์ด ๊ฒฝ์ฐ๋ฅผ ๋ณด์. ๋จผ์ ์ฒซ ๋ฒ์งธ ์นธ์ 1์ด ๋์๋ค. ๊ทธ๋ฌ๋ฉด ๊ฐ๋ก๋ก ํ ์นธ ์ด๋ํ๋ค. ๋ 1์ด๋ค. ๋ ํ ์นธ ์ด๋ํ๋ค. ์ด๋ฒ์ 0์ด ๋์๋ค. ๊ทธ๋ฌ๋ฉด ๋ค์ ๋ ๋ฒ์งธ ์ค๋ก ๋์์์ ์๋๋ฅผ ๊ฒ์ฌํ๋ค. 0์ด๋ค. ๊ทธ๋ฌ๋ฉด ๋ค์ ์ฒซ ๋ฒ์งธ ์ค๋ก ๋์์จ๋ค. ์๋๋ฅผ ๊ฒ์ฌํ๋ค. 1์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ค์ ๊ฐ๋ก๋ก ํ ์นธ ์ด๋ํด์ ๊ฒ์ฌํ๋ค. 0์ด๋ค. ๊ทธ๋ฌ๋ฉด ์๋๋ฅผ ๊ฒ์ฌํ๋ค. 0์ด๋ค. ์๊ณผ ์๋ ๋ ๋ค 0์ด ๋์์ผ๋ฏ๋ก count๋ฅผ 1 ์ฆ๊ฐ์ํค๊ณ ํ ์ฌ์ดํด์ด ๋๋๋ค.
์ ์๊ณ ๋ฆฌ์ฆ์ dfs๋ฅผ ์ด์ฉํด์ ์ง๊ฒ ๋ ๊ฒ ๊ฐ๋ค.
(0,0) --> (0,1) --> (0,2)
(0,0) --> (0,1)
(0,0) --> (0,1) --> (1,1)
(0,0) --> (0,1)
(0,0)
(0,0) --> (1,0) --> (1,1)
(0,0) --> (1,0)
(0,0) --> (1,0) --> (2,0)
(0,0) --> (1,0)
(0,0)
์ด๊ฑธ ๋๊ฐ ์์๋ณผ๊น ์ถ๊ธฐ๋ ํ๋ฐ.... ์ ๋ฐ์์ผ๋ก ์ญ ๊ฐ๋ค ๋งํ๋ฉด ๋์์ค๊ณ ์ญ ๊ฐ๋ค ๋งํ๋ฉด ๋์์ค๊ณ ๊ทธ๋ฐ์์ผ๋ก?
๋ฌธ์ ๋ ์ด์ ํ๋๋ง ๊ฒ์ฌํ ๊ฒ ์๋๋ผ๋ ๊ฑฐ์ง. ๋ง์ฝ
1 1 0 0 1 1
1 0 0 0 0 1
0 0 0 0 0 0
์ด ๊ฒฝ์ฐ๋ผ๋ฉด.. ์ฒซ ๋ฒ์งธ ๋ฐฐ์ถ ๋ฌด๋ฆฌ๋ฅผ ๊ฒ์ฌํ ์ดํ์ ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
์ฒซ ๋ฒ์งธ ์๊ณ ๋ฆฌ์ฆ์ ๋ง์น๊ณ ๋๋ฉด (0,0)์ผ๋ก ๋์์ ์์ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ค์ ๊ฒ์ฌ ์์ ์ง์ ์..? ๋ด๊ฐ ์๊ฐํด๋ดค๋๋ฐ (0,0+i)์์ map(0,0+i)๊ฐ 0์ด ๋์ค๋ฉด int ok ๊ฐ์ 1๋ก ๋ฐ๊ฟ์ฃผ๊ณ ๋ค์ 1์ด ๋์ค๋ฉด ok๊ฐ์ 0์ผ๋ก ๋ฐ๊พธ๊ณ ๋์ ์ ํ๋์ ๋ฐ๋ณตํ๋ฉด ๋์ง ์์๊น..?
์ ์๋๋ฉด ์ ๋ ๊ฒ ํ์์ ์๋ฃํ ์ง์ ๋ค์ ๊ฐ์ 0์ด๋ 2๋ก ๋ฐ๊ฟ์ค ๋ค์, ๊ทธ๋ฅ ํ ์ ํ ์ ์ ๋ถ ๊ฒ์ฌํด๊ฐ๋ฉฐ 1์ด ๋์ค๋ฉด ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์ ๋ฐ๋ณตํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
์ ์ด์ ๋ํผ์ ๋ก ํ์์ผ๋ ์ค์ ์ฝ๋ฉ์ ํ๋ฌ ๊ฐ๋ณด๋๋ก ํ์.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int map[50][50] = { 0, };
int M, N, K;
int cnt = 0;
int end = 0; int baechu = 0;
void func();
void dfs(int x, int y);
void printmap();
int main() {
int T;
int i;
scanf("%d", &T);
for (i = 0; i < T; i++) {
func();
}
}
void func() {
int i, tmpx, tmpy;
cnt = 0; end = 0; baechu = 0;
scanf("%d %d %d", &N, &M, &K);
for (i = 0; i < K; i++) {
scanf("%d %d", &tmpx, &tmpy);
map[tmpx][tmpy] = 1;
}
dfs(0, 0);
printf("\n%d\n", cnt);
}
void dfs(int x, int y) {
printf("dfs(%d, %d)\n", x, y);
printmap(); printf("\n");
printf("cnt = %d", cnt); printf("\n");
if (x == N - 1 && y == N - 1) {
end = 1;
return;
}
while (!end) {
if (map[x][y] == 0) {
if (baechu == 0) {
if (x == N - 1)
dfs(0, y + 1);
else
dfs(x + 1, y);
}
if (baechu == 1) {
return;
}
}
if (map[x][y] == 1 && baechu == 0) {
baechu = 1; cnt++;
if (x != N - 1)
dfs(x + 1, y);
dfs(x, y + 1);
map[x][y] = 0;
baechu = 0;
}
if (map[x][y] == 1 && baechu == 1) {
if (x != N - 1)
dfs(x + 1, y);
dfs(x, y + 1);
map[x][y] = 0;
}
}
}
void printmap() {
int i, j;
for (i = 0; i < M; i++) {
for (j = 0; j < N; j++) {
printf("%d ", map[j][i]);
}
printf("\n");
}
}
์ ๋ด๊ฐ ์ด๊ฑธ ํ์์ด ๋๋ฐ ๊ฐ๊ฒฉ์ ์ด์ผ ์ฐ์ ๋ฌผ๋ก ๋ฐฑ์ค์ฒ๋ผ ํ ๋ฒ์ ์ ๋ ฅ๋ฐ๊ณ ๋ต๋ด๋๊ฒ ์๋๋ผ ๋ชจ๋ ์ผ์ด์ค๊ฐ ์ ๋์๊ฐ๋์ง ์์ง ํ์ธ์ ๋ชปํด๋ดค์ง๋ง ์ ์ด๋ ํ ์คํธ์ผ์ด์ค ์ํ์ ์ ๋์๊ฐ๋คใ ใ ใ ใ ใ ๋ด์ผ ๋ง์ ๊ณ ์น๊ณ ์ค๋ช ์จ์ผ๊ฒ ๊ตฐ! ! ํ๋ณตํ๋ค!
'๐ก๐ธ๐ธ๐ถ๐ฃ: ๐๐๐๐๐๐พ๐๐ฝ๐ > ๐ก๐ฃ๐ข๐ฃ: ๐๐๐๐๐๐พ๐๐ฝ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ALPS Study] DFS(๊น์ด ์ฐ์ ํ์) - ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ(BOJ 2667) (0) | 2020.07.30 |
---|---|
[ALPS Study] DFS(๊น์ด ์ฐ์ ํ์) - ํ ํ๋ก์ ํธ(BOJ 9466) (0) | 2020.07.22 |
[ALPS Study] ํ์ -๊ทธ๋ํ์ DFS(๊น์ด ์ฐ์ ํ์)(2) (0) | 2020.07.17 |
[ALPS Study] ํ์ -๊ทธ๋ํ์ DFS(๊น์ด ์ฐ์ ํ์)(1) (0) | 2020.07.16 |
[ALPS Study] ์์ ํ์ - N๊ณผ M(ํด๊ฒฐ์ค) + ๋ณต์ต (0) | 2020.07.15 |