๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
728x90

Graph7

[graph] ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS, Breadth First Search) ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS, Breadth First Search) ์‹œ์ž‘ ์ •์ ์œผ๋กœ๋ถ€ํ„ฐ ์ธ์ ‘ํ•œ ์ •์ ๋“ค์„ ๋ชจ๋‘ ์ฐจ๋ก€๋กœ ๋ฐฉ๋ฌธํ•œ ํ›„ ๋ฐฉ๋ฌธํ–ˆ๋˜ ์ •์ ์„ ๋‹ค์‹œ ์‹œ์ž‘์ ์œผ๋กœ ํ•˜์—ฌ ์ธ์ ‘ํ•œ ์ •์ ๋“ค์„ ์ฐจ๋ก€๋กœ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ๋ฒ• ๊ฐ€๊นŒ์šด ์ •์ ๋“ค์„ ๋จผ์ € ๋ฐฉ๋ฌธํ•˜๊ณ  ๋ฉ€๋ฆฌ ์žˆ๋Š” ์ •์ ๋“ค์€ ๋‚˜์ค‘์— ๋ฐฉ๋ฌธํ•˜๋Š” ์ˆœํšŒ ๋ฐฉ๋ฒ• ์ธ์ ‘ํ•œ ์ •์ ๋“ค์— ๋Œ€ํ•ด ์ฐจ๋ก€๋กœ ๋‹ค์‹œ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์„ ๋ฐ˜๋ณตํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์„ ์ž…์„ ์ถœ(First-IN First-Out) ๊ตฌ์กฐ์ธ ํ(Queue) ์‚ฌ์šฉ BFS ์ˆ˜ํ–‰์ˆœ์„œ ํ๊ฐ€ ๊ณต๋ฐฑ์ด ๋  ๋•Œ๊นŒ์ง€ ๋นจ๊ฐ„ ์ƒ์ž ๋ถ€๋ถ„์„ ๋ฐ˜๋ณตํ•œ๋‹ค. BFS ๊ณผ์ • ํ‘œํ˜„ โ†“ โ†“ โ†“ โ†“ โ†“ โ†“ โ†“ โ†“ Queue๊ฐ€ ๋น„์—ˆ์œผ๋ฏ€๋กœ ํƒ์ƒ‰ ์ข…๋ฃŒ ๊ฒฐ๊ณผ : 1 โ†’ 2 โ†’ 4 โ†’ 3 โ†’ 5 ์ธ์ ‘ ํ–‰๋ ฌ๋กœ ๊ตฌํ˜„ํ•œ ๊ทธ๋ž˜ํ”„ BFS static void BFS(int[][] graph, int v) { /.. 2023. 3. 7.
[graph] ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS, Depth First Search) ๊ทธ๋ž˜ํ”„ ์ˆœํšŒ(Graph Traversal) ๋˜๋Š” ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰(Graph Search) ๋ž€? ํ•˜๋‚˜์˜ ์ •์ ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๊ทธ๋ž˜ํ”„์— ์žˆ๋Š” ๋ชจ๋“  ์ •์ ์„ ํ•œ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS, Depth First Search) ์‹œ์ž‘ ์ •์ ์—์„œ ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๋จผ ๊ฒฝ๋กœ๊นŒ์ง€ ๊นŠ์ด ํƒ์ƒ‰ํ•ด๊ฐ€๋‹ค๊ฐ€ ๋” ์ด์ƒ ๊ฐˆ ๊ณณ์ด ์—†์œผ๋ฉด ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋งŒ๋‚ฌ๋˜ ๊ฐ„์„ ์ด ์žˆ๋Š” ์ •์ ์œผ๋กœ ๋˜๋Œ์•„์™€์„œ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์˜ ๊ฐ„์„ ์œผ๋กœ ํƒ์ƒ‰์„ ๊ณ„์†ํ•จ์œผ๋กœ์จ ๋ชจ๋“  ์ •์ ์„ ๋ฐฉ๋ฌธํ•˜๋Š” ์ˆœํšŒ๋ฐฉ๋ฒ• ๋งˆ์ง€๋ง‰ ๊ฐˆ๋ฆผ๊ธธ๋กœ ๋˜๋Œ์•„๊ฐ€์•ผํ•˜๋ฏ€๋กœ ํ›„์ž…์„ ์ถœ(Last-IN-First-Out) ๊ตฌ์กฐ์ธ ์Šคํƒ(Stack) ์‚ฌ์šฉ ์‚ฌ์‹ค์ƒ ๋ฐฑํŠธ๋ž˜ํ‚น๊ณผ ๋˜‘๊ฐ™์€ ๊ฐœ๋…์„ ์‚ฌ์šฉํ•œ๋‹ค. DFS ์ˆ˜ํ–‰ ์ˆœ์„œ ์Šคํƒ์ด ๊ณต๋ฐฑ์ด ๋  ๋•Œ๊นŒ์ง€ ๋นจ๊ฐ„ ์ƒ์ž ๋ถ€๋ถ„์„ ๋ฐ˜๋ณตํ•œ๋‹ค. DFS ๊ณผ์ • ํ‘œํ˜„ โ†“ โ†“ โ†“ โ†“ โ†“ โ†“ โ†“ .. 2023. 3. 6.
[graph] ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ๊ตฌํ˜„ํ•˜๊ธฐ โ˜… ์ •์ ์˜ ๊ฐœ์ˆ˜ n๊ฐœ , ๋ชจ์„œ๋ฆฌ์˜ ๊ฐœ์ˆ˜ m๊ฐœ โ˜… ์•ž์„  ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ๊ตฌํ˜„ํ•œ ๊ฒŒ์‹œ๊ธ€๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ ๋…ธ๋“œ๋Š” ์ •์ ์„ ์ €์žฅํ•˜๋Š” ํ•„๋“œ์™€ ๋‹ค์Œ ์ธ์ ‘ ์ •์ ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋งํฌ ํ•„๋“œ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์ •์  i์˜ ์ง„์ถœ ์ฐจ์ˆ˜ = i์˜ ๋…ธ๋“œ์˜ ์ˆ˜ ex) ์ •์  2์˜ ์ง„์ถœ ์ฐจ์ˆ˜ = 2 JAVA ์ž๋ฃŒ๊ตฌ์กฐ ๊ตฌํ˜„ ์ฝ”๋“œ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Comparator; import java.util.StringTokenizer; class Node { int vertex; //์ •์  Node link; //๋‹ค์Œ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”.. 2023. 3. 4.
[graph] ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ๊ตฌํ˜„ํ•˜๊ธฐ โ˜… ์ •์ ์˜ ๊ฐœ์ˆ˜ n๊ฐœ , ๋ชจ์„œ๋ฆฌ์˜ ๊ฐœ์ˆ˜ m๊ฐœ โ˜… ๊ฐ ์ •์ ์— ๋Œ€ํ•œ ์ธ์ ‘ ์ •์ ๋“ค์„ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ ๋…ธ๋“œ๋Š” ์ •์ ์„ ์ €์žฅํ•˜๋Š” ํ•„๋“œ์™€ ๋‹ค์Œ ์ธ์ ‘ ์ •์ ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋งํฌ ํ•„๋“œ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์–ด๋–ค ์ •์ ์˜ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๊ทธ ์ •์ ์— ์ธ์ ‘ํ•œ ์ •์ ์˜ ์ˆ˜(= ์ •์ ์˜ ์ฐจ์ˆ˜)๋งŒํผ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค. ์ •์  i์˜ ์ฐจ์ˆ˜ = i์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋…ธ๋“œ ์ˆ˜ ex) ์ •์  2์˜ ์ฐจ์ˆ˜ = 3 JAVA ์ž๋ฃŒ๊ตฌ์กฐ ๊ตฌํ˜„ ์ฝ”๋“œ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Comparator; import java.util.StringTo.. 2023. 3. 4.
[graph] ์ธ์ ‘ ๋ฐฐ์—ด๋กœ ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ๊ตฌํ˜„ํ•˜๊ธฐ โ˜… ์ •์ ์˜ ๊ฐœ์ˆ˜ n๊ฐœ , ๋ชจ์„œ๋ฆฌ์˜ ๊ฐœ์ˆ˜ m๊ฐœ โ˜… ์•ž์˜ ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒŒ์‹œ๊ธ€๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ n X n ์ด์ฐจ์› ๋ฐฐ์—ด(์ •์ ์˜ ์ˆ˜์— ๋Œ€ํ•œ ์ •๋ฐฉํ–‰๋ ฌ)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ์ •์  ์‚ฌ์ด์— ๊ฐ„์„ ์ด ์กด์žฌํ•˜๋ฉด 1, ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด 0์œผ๋กœ ์ €์žฅํ•œ๋‹ค. ํ–‰๋ ฌ์˜ ๋Œ€๊ฐ์„  ๊ฐ’์€ ํ•ญ์ƒ 0์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ โ‰  ์ด๋ฏ€๋กœ ๋Œ€์นญ์„ ์ด๋ฃจ์ง€๋Š” ์•Š๋Š”๋‹ค. ํ–‰ i์˜ ํ•ฉ = ์ •์  i์˜ ์ง„์ถœ ์ฐจ์ˆ˜ ์—ด i์˜ ํ•ฉ = ์ •์  i์˜ ์ง„์ž… ์ฐจ์ˆ˜ ex) ์ •์  2์˜ ์ง„์ถœ ์ฐจ์ˆ˜ = 0 + 0 + 1 + 1 = 2 ์ •์  2์˜ ์ง‘์ž… ์ฐจ์ˆ˜ = 1 + 0 + 0 + 0 = 1 JAVA ๊ตฌํ˜„ ์ฝ”๋“œ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java... 2023. 3. 4.
[graph] ์ธ์ ‘ ๋ฐฐ์—ด๋กœ ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ๊ตฌํ˜„ํ•˜๊ธฐ โ˜… ์ •์ ์˜ ๊ฐœ์ˆ˜ n๊ฐœ , ๋ชจ์„œ๋ฆฌ์˜ ๊ฐœ์ˆ˜ m๊ฐœ โ˜… ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ •์ ์— ๋Œ€ํ•ด์„œ ๋‘ ์ •์ ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ ์˜ ์œ ๋ฌด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ• n X n ์ด์ฐจ์› ๋ฐฐ์—ด(์ •์ ์˜ ์ˆ˜์— ๋Œ€ํ•œ ์ •๋ฐฉํ–‰๋ ฌ)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ์ •์  ์‚ฌ์ด์— ๊ฐ„์„ ์ด ์กด์žฌํ•˜๋ฉด 1, ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด 0์œผ๋กœ ์ €์žฅํ•œ๋‹ค. ์ด๋•Œ, ํ•˜๋‚˜์˜ ์ •์ ์—์„œ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๊ฐ„์„ (=์ž์ฒด ๊ฐ„์„ )์€ ์กด์žฌํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ํ–‰๋ ฌ์˜ ๋Œ€๊ฐ์„  ๊ฐ’์€ ํ•ญ์ƒ 0 ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์˜ ๊ฒฝ์šฐ ํ–‰๋ ฌ์˜ (i, j)์™€ (j,i)์˜ ๊ฐ’์ด ๊ฐ™์œผ๋ฏ€๋กœ ๋Œ€๊ฐ์„ ์„ ์ค‘์‹ฌ์œผ๋กœ ๋Œ€์นญ์„ ์ด๋ฃฌ๋‹ค. ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ ํ–‰ i์˜ ํ•ฉ = ์—ด i์˜ ํ•ฉ = ์ •์  i์˜ ์ฐจ์ˆ˜ ex) ์ •์  2์˜ ์ฐจ์ˆ˜ = 2ํ–‰์˜ ํ•ฉ(=1+0+1+1) = 2์—ด์˜ ํ•ฉ(=1+0+1+1) = 3 JAVA๋กœ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ import java.io.BufferedReader;.. 2023. 3. 4.
[graph] ๊ธฐ๋ณธ ๊ฐœ๋… ์ •๋ฆฌ 1. ๊ทธ๋ž˜ํ”„ G = (V, E) V(vertex) ์ •์  : ์—ฐ๊ฒฐํ•  ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ E(edge) ๋ชจ์„œ๋ฆฌ : ํ•œ์Œ์˜ ์ •์ ์„ ์ด์€ ๊ฒƒ graph๋ž€? ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ์›์†Œ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ์ฆ‰, ์ •์ ๊ณผ ๊ฐ„์„ ์˜ ์ง‘ํ•ฉ 2. ๊ทธ๋ž˜ํ”„์˜ ์ข…๋ฅ˜ ์ข…๋ฅ˜ ์„ค๋ช… ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(undirected graph) ๊ฐ„์„ ์— ๋ฐฉํ–ฅ์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„ ์ž„์˜์˜ ๋ชจ์„œ๋ฆฌ (x, y)โˆˆE ์ด๋ฉด (y, x)โˆˆE ๋ฅผ ๋งŒ์กฑํ•œ๋‹ค. ์ฆ‰, (x, y)์™€ (y, x)๋Š” ๊ฐ™์€ ๊ฐ„์„ ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(directed graph) = ๋‹ค์ด๊ทธ๋ž˜ํ”„(digraph) ๊ฐ„์„ ์— ๋ฐฉํ–ฅ์ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”„ = i โ†’ j = ๋กœ ํ‘œํ˜„ ์ž„์˜์˜ ๋ชจ์„œ๋ฆฌ (x, y)โˆˆE ์ด๋ฉด (y, x)โˆˆE ๋ฅผ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š”๋‹ค. ์™„์ „ ๊ทธ๋ž˜ํ”„(complete graph) ํ•œ ์ •์ ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ •์ .. 2023. 3. 3.
728x90