dfs๋ฅผ ์ด์ฉํ์ฌ ํ ์ ์๊ณ , bfs๋ก๋ ํ ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ง ๊ณณ์ ๊ธฐ์ค์ผ๋ก ์ฃผ์์ ๋ฐฐ์ถ๋ค์ ์์ ๋ฒ๋ฆฌ๋ฉด ๋ฉ๋๋ค. ๋ฌด์จ ๋ง์ธ์ง ์์ง์ ๋ชจ๋ฅด์ค๊ฒ๋๋ค.
https://www.acmicpc.net/problem/1012
1012๋ฒ: ์ ๊ธฐ๋ ๋ฐฐ์ถ
์ฐจ์ธ๋ ์๋์ธ ํ๋๋ ๊ฐ์๋ ๊ณ ๋ญ์ง์์ ์ ๊ธฐ๋ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๊ธฐ๋ก ํ์๋ค. ๋์ฝ์ ์ฐ์ง ์๊ณ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๋ ค๋ฉด ๋ฐฐ์ถ๋ฅผ ํด์ถฉ์ผ๋ก๋ถํฐ ๋ณดํธํ๋ ๊ฒ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์, ํ๋๋ ํด์ถฉ ๋ฐฉ์ง์ ๏ฟฝ
www.acmicpc.net
์ด ๋ฌธ์ ์ ํต์ฌ์ ๋นจ๊ฐ์์ ์ ์ธํ๊ณ ๊ทธ ์ธ์ ํ ๊ณณ์ ๋ชจ๋ 0์ผ๋ก ๋ฐ๊ฟ๋ฒ๋ฆฌ๋ฉด ๋ฉ๋๋ค. ์ฆ ๋ชจ์ฌ์๋ ๋ฐฐ์ถ์ค์ ํ๋๋ง ์ ํํ๋ค๋ ๊ฒ์ธ๋ฐ์ ๊ทธ๋์ผ ์ง๋ ์ด์ ๊ฐฏ์๋ฅผ ์ ์ ์์ต๋๋ค.
์ด๊ฒ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ตฌํํ์๋ฉด ๋๋๋ฐ ๋ฐฉ๋ฒ์ ๋ง์ต๋๋ค. ํ์ง๋ง, ๋ฌด์กฐ๊ฑด ๋ฐฐ์ถ๋ฌด๋ฆฌ์ ํ๋๋ง ๋นผ๊ณ ๋ค ์ง์์ผ ํ๊ณ , ๊ทธ๊ฑธ ์ด๋ป๊ฒ ํํํ๋์ง๋ ๋ณธ์ธ ๋ชซ์ ๋๋ค.
๋ค๋ฅธ ๋ธ๋ก๊ทธ๋ฅผ ๋ณด๋ ์ด๋ค ๋ถ์ ์ด์ค for๋ฌธ์ ์ด์ฉํด์ ๊ธฐ์ค ๋ฐฐ์ถ๋ฐ๊ฒฌํ๋ฉด ๊ทธ ๋ฐฐ์ถ๋ฅผ ์ค์ฌ์ผ๋ก ๋๋จธ์ง ๋ฐฐ์ถ๋ค์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ์ํด์ผ๋ก์จ ๊ตฌํ ํ์ จ์ต๋๋ค.
์ ๋ ์๋์ ๊ฐ์ด ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ ์๋ค(land[i]=1)์ด๋ผ๋ฉด depth๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ธฐ์ค ๋ฐฐ์ถ์ ๋๋จธ์ง ๋ฐฐ์ถ๋ฅผ ๋ฐ๋ก ์ฒ๋ฆฌํ์ต๋๋ค.
package al4;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
static int t,m,n,k;
static int a,b;
static int sum;
static int[][] land;
static int[][] visit;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
t = Integer.parseInt(br.readLine());
for(int tc=0; tc<t; tc++)
{
st = new StringTokenizer(br.readLine()," ");
m = Integer.parseInt(st.nextToken());
n = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
land = new int[n][m];
visit = new int[n][m];
sum = 0;
for(int i=0; i<k; i++)
{
st = new StringTokenizer(br.readLine()," ");
a = Integer.parseInt(st.nextToken());
b = Integer.parseInt(st.nextToken());
land[b][a] = 1;
}
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
dfs(i,j,0);
}
}
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
sum += land[i][j];
}
}
bw.write(sum+"\n");
}
bw.flush();
br.close();
bw.close();
}
static void dfs(int c, int d, int depth) {
if(c>=n||d>=m||c<0||d<0)return;
if(visit[c][d]==1)return;
visit[c][d] = 1;
if(land[c][d] == 1) {
if(depth!=0) {
land[c][d] = 0;
}
dfs(c+1,d,depth+1);
dfs(c-1,d,depth+1);
dfs(c,d-1,depth+1);
dfs(c,d+1,depth+1);
}
else if(land[c][d]==0) {
return;
}
}
}
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํฐ ์์ ๋ง์ (0) | 2021.06.09 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] DFS, BFS์ ๊ตฌํ (0) | 2020.10.13 |
10816 ์ซ์ ์นด๋ 2 (0) | 2020.08.05 |
1051๋ฒ: ์ซ์ ์ ์ฌ๊ฐํ (0) | 2020.08.05 |
๋ฐฑ์ค์จ๋ผ์ธ์ ์ง 2759 ๊ณ๋จ ์ค๋ฅด๊ธฐ ์๋ฐํ์ด (0) | 2020.07.12 |