๋ฐ์ํ
https://www.acmicpc.net/problem/11403
dfs ์ฝ๋
import java.util.Scanner;
public class Main {
static int[][] graph; // ๋ฐฉํฅ๊ทธ๋ํ ์ธ์ ํ๋ ฌ
static int[][] path; // ๊ฒฐ๊ณผ ์ถ๋ ฅํ 2์ฐจ์ ๋ฐฐ์ด
static boolean[] visit; // ํ์ ์ฌ๋ถ ์ฒดํฌ
static int N; // ์ ์ ์ ๊ฐฏ์
public static void dfs(int x, int y) {
visit[y] = true; // ๊ฐ ํ๋ง๋ค ์ด์ ๊ธฐ์ค์ผ๋ก ์ฒดํฌํ๋ฏ๋ก y๊ฐ ์ฒดํฌ
path[x][y] = 1; // x -> y๋ก ์ด๋ํ๋ ๊ฒฝ๋ก ์กด์ฌ, 1๋ก ์ค์
for(int i=0; i<N; i++) {
if(graph[y][i] == 1 && visit[i] == false) {
dfs(x, i);
}
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
N = scan.nextInt();
graph = new int[N][N];
path = new int[N][N];
visit = new boolean[N];
// ๊ทธ๋ํ์ ์ธ์ ํ๋ ฌ
// i => j ๊ฐ์ ์ด ์กด์ฌํ๋ฉด 1, ์กด์ฌํ์ง ์์ผ๋ฉด 0
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++) {
graph[i][j] = scan.nextInt();
}
}
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++) {
visit[j] = false; // ํ(i) ๋ง๋ค ๊ฒฝ๋ก๋ฅผ ํ์ํด์ผ ํ๋ฏ๋ก ๋ฐฉ๋ฌธํ๊ณณ ์ด๊ธฐํ
}
for(int j=0; j<N; j++) {
if(graph[i][j] == 1 && visit[j] == false) {
dfs(i, j);
}
}
}
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++) {
System.out.print(path[i][j] + " ");
}
System.out.println();
}
}
}
bfs ์ฝ๋
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
static int[][] graph; // ๊ทธ๋ํ ์ธ์ ํ๋ ฌ
static int[][] result; // ๊ฒฐ๊ณผ ์ถ๋ ฅํ ๋ฐฐ์ด
static boolean[] visit; // ํ์ ์ฌ๋ถ ์ฒดํฌ
static int N; // ์ ์ ์ ๊ฐฏ์
public static void bfs(int start) {
Queue<Integer> q = new LinkedList<Integer>();
q.offer(start);
while(!q.isEmpty()) {
int temp = q.poll(); // ์ฒซ๋ฒ์งธ ๋ฐฉ๋ฌธํ ์์น ๋นผ์ค๋ค.
for(int i=0; i<N; i++) {
if(graph[temp][i] == 1 && visit[i] == false) {
q.offer(i);
visit[i] = true; // ๋ฐฉ๋ฌธํ๊ณณ - ๋ค์ ๋ฐฉ๋ฌธX, true๋ก ์ฒดํฌ
/*
* ์์ ์
๋ ฅ์ ๋ณด๋ฉด,
* 0 1 0
* 0 0 1
* 1 0 0
* 0์ 1๋ก ์ฐ๊ฒฐ, 1์ 2๋ก ์ฐ๊ฒฐ, 2๋ 0์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์
* ์ต์ข
์ ์ผ๋ก 0์ 1, 2, ๋ค์ 0์ผ๋ก ๋์์ฌ ์ ์์
*/
result[start][i] = 1; // ๊ฒฝ๋ก์กด์ฌํ ์ 1๋ก ๋ณ๊ฒฝ.
}
}
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
N = scan.nextInt();
graph = new int[N][N];
result = new int[N][N];
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++) {
graph[i][j] = scan.nextInt();
}
}
for(int i=0; i<N; i++) {
visit = new boolean[N];
bfs(i);
}
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++) {
System.out.print(result[i][j] + " ");
}
System.out.println();
}
scan.close();
}
}
ํ์ด
๋ ธ๋๋ฅผ ํ์ํ ๋๋ง๋ค, ๊ฒฝ๋ก๊ฐ ์กด์ฌํ ๋ 1๋ก ์ค์ ํ๋ค.
๊ธฐ์กด์ dfs์ ๋์ผํ๊ฒ i -> j๋ก ๊ฐ์์๋ ๊ฒฝ๋ก๊ฐ ์๊ณ , ๋ฐฉ๋ฌธํ์ง ์์๊ฒฝ์ฐ dfs๋ฅผ ํธ์ถํ๋ค.
dfs์์๋ ํธ์ถ๋ฐ์ i, j ์ขํ๋ ๋ฐฉ๋ฌธํ ์ ์๋ ๊ณณ์ด๋ฏ๋ก ๋ฐฉ๋ฌธ์ฒดํฌ๋ฅผ ํ๊ณ , ์ถ๋ ฅํ ๋ฐฐ์ด path[][]์ 1๋ก ์ค์ ํ๋ค.
์ฌ์ค ์์ง dfs, bfs, ๊ทธ๋ํ์ ๋ํ ์ดํด๊ฐ ์๋ฒฝ์น ์์์ ๊ตฌํ๋ ์ด๋ ค์ ๊ณ ... ๋ธ๋ก๊ทธ๋ฅผ ์์ญ๊ฐ๋ ๋ณธ๊ฒ๊ฐ๋ค ใ ใ
ํ๋ํ๋ ๋ ผ๋ฆฌ๋ฅผ ๊ทธ๋ ค๊ฐ๋ฉฐ ์ดํดํด๋ณด๋๋ก ๋ ธ๋ ฅํด์ผ๊ฒ ๋ค ...
๋ฐ์ํ
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2262๋ฒ: ํ ๋๋จผํธ ๋ง๋ค๊ธฐ(๊ทธ๋ฆฌ๋) (0) | 2020.02.06 |
---|---|
[๋ฐฑ์ค] 5218๋ฒ: ์ํ๋ฒณ ๊ฑฐ๋ฆฌ(๋ฌธ์์ด) (0) | 2020.02.06 |
[๋ฐฑ์ค] 1475๋ฒ: ๋ฐฉ ๋ฒํธ(๋ฌธ์์ด, ๊ตฌํ) (0) | 2020.02.05 |
ํ๋ก๊ทธ๋๋จธ์ค[Java] - ๊ตฌ๋ช ๋ณดํธ(๊ทธ๋ฆฌ๋) (0) | 2020.02.04 |
[๋ฐฑ์ค] 9625๋ฒ: BABBA(DP) (0) | 2020.02.04 |
๋๊ธ