[C++] DFS

Singery00ยท2024๋…„ 8์›” 11์ผ

C++

๋ชฉ๋ก ๋ณด๊ธฐ
5/7
post-thumbnail

๊ฐœ์š”

๐Ÿ’ก DFS์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

C++๋กœ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)์„ ์•Œ์•„ ๋ณด๊ณ  ๊ตฌํ˜„ํ•ด๋ณด์ž.

์ฐธ๊ณ  ์ž๋ฃŒ


๋ณธ๋ก 


DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)

๊ฐœ๋…

DFS๋Š” Depth-First Search์˜ ์•ฝ์ž๋กœ '๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰'์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ˆœํ™˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜๋กœ, ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ๋ฃจํŠธ ๋…ธ๋“œ ํ˜น์€ ์ž„์˜์˜ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•ด์„œ
๋‹ค์Œ ๋ถ„๊ธฐ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— ํ•ด๋‹น ๋ถ„๊ธฐ์— ๋Œ€ํ•œ ์™„์ „ ํƒ์ƒ‰ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

์ฃผ๋กœ, ์žฌ๊ท€ํ•จ์ˆ˜ ๋˜๋Š” Stack๋กœ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ง•

์‹œ๊ฐ„ ๋ณต์žก๋„

DFS์€ ์ •์  ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ N, ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๋ฅผ E๋ผ๊ณ  ํ•  ๋•Œ,

์ธ์ ‘ ํ–‰๋ ฌ์—์„œ๋Š” O(Nยฒ)์˜,
์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์—์„œ๋Š” O(N+E)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

์žฅ์ 

ํ˜„ ๊ฒฝ๋กœ์ƒ์˜ ๋…ธ๋“œ๋“ค๋งŒ์„ ๊ธฐ์–ตํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์ €์žฅ ๊ณต๊ฐ„์˜ ์ˆ˜์š”๊ฐ€ ๋น„๊ต์  ์ ์Šต๋‹ˆ๋‹ค.

๋ชฉํ‘œ ๋…ธ๋“œ๊ฐ€ ๊นŠ์€ ๋‹จ๊ณ„์— ์žˆ์„ ๊ฒฝ์šฐ ํ•ด๋ฅผ ๋นจ๋ฆฌ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ 

๋…ธ๋“œ์— ๋Œ€ํ•œ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Š” ๊ฐ ๋…ธ๋“œ์— ๋Œ€ํ•œ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๊ณ ,
์ง€์ •๋œ ๊นŠ์ด๊นŒ์ง€๋งŒ ํƒ์ƒ‰ํ•˜๋Š” ์กฐ๊ธฐ ์ข…๋ฃŒ๊ฐ€ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์–ป์–ด์ง„ ํ•ด๊ฐ€ ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ ๋œ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†์Šต๋‹ˆ๋‹ค.

๊ตฌํ˜„

๋…ธ๋“œ์™€ ๊ฐ„์„ ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ 2์ฐจ์› ๋ฒกํ„ฐ A๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋…ธ๋“œ ๋ฒˆํ˜ธ์ธ์ ‘ ๋…ธ๋“œ
12, 3, 4
21, 4
31, 4
41, 2, 3

๊ทธ๋ฆฌ๊ณ  ๊ฐ ๋…ธ๋“œ์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•  bool ๋ฒกํ„ฐ visited๋„ ๋งŒ๋“ค์–ด ์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

static vector<bool> visited(N+1,false);

์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DFS๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

1๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

void DFS(int node);

int main()
{
	DFS(1);
}

void DFS(int node)
{
	visited[node] = true;
    
    for (int i : A[node])
    {
    	if (!visited[i])
        {
        	visited[i] = true;
            DFS(i);
        }
    }
}

๊ธฐ๋ณธ์ ์ธ DFS ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด์ œ ๋ฏธ๋กœ ์ฐพ๊ธฐ, ๋‹จ์ ˆ์  ์ฐพ๊ธฐ, ๋‹จ์ ˆ์„  ์ฐพ๊ธฐ, ์œ„์ƒ ์ •๋ ฌ ๋“ฑ์˜ ๋ฌธ์ œ์— ๋งž๊ฒŒ ๊ฐ ์กฐ๊ฑด์„ ์ถ”๊ฐ€๋กœ DFS ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ๊ตฌํ˜„ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


๋งˆ๋ฌด๋ฆฌ

์ด์ƒ์œผ๋กœ DFS์˜ ๊ฐœ๋…๊ณผ ๊ธฐ๋ณธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ถ”ํ›„ DFS ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ํ’€์–ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

profile
๊ฒŒ์ž„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ณด์ž

0๊ฐœ์˜ ๋Œ“๊ธ€