ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90

๐Ÿšฉ DFS, ๋ฐฑํŠธ๋ž˜ํ‚น, ์žฌ๊ท€ํ•จ์ˆ˜, ์Šคํƒ

 

thinking

for๋ฌธ์„ ๋Œ๋ฉด์„œ 1๋ถ€ํ„ฐ ๋ฆฌ์ŠคํŠธ์— ๋„ฃ๊ณ  M๊ฐœ๊ฐ€ ๋‹ค ์Œ“์ด๋ฉด ์ถœ๋ ฅํ•˜๋„๋ก ์ž‘์„ฑํ•จ.

์–ด์ฐจํ”ผ for๋ฌธ์ด ์ˆซ์ž ์ˆœ์„œ๋Œ€๋กœ ๋Œ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์—ด์˜ ์ˆœ์„œ๋Š” ๊ตณ์ด ๊ณ ๋ ค ์•ˆํ•จ.

์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ์œผ๋ฉด ๊ฑด๋„ˆ๋›ฐ๊ณ , ๋ฐฉ๋ฌธ ์•ˆํ–ˆ์œผ๋ฉด ๋ฐฉ๋ฌธ ์ฒดํฌ ํ•œ ํ›„, ์ถœ๋ ฅ๋ฆฌ์ŠคํŠธ์— ๋„ฃ๊ณ  ๋‹ค์Œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ.

 

์ฝ”๋“œ1

๋ฐฉ๋ฌธ์ฒดํฌ๋กœ ํ‘ผ ํ’€์ด

def DFS():
    if len(s) == M:
        print(*s)
        return

    for i in range(1, N+1):
        if visited[i]:  # ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ์œผ๋ฉด ๊ฑด๋„ˆ๋œ€
            continue

        # ๋ฐฉ๋ฌธ ์•ˆํ–ˆ์œผ๋ฉด ๋ฐฉ๋ฌธ์ฒดํฌ ํ›„, ์ถœ๋ ฅ ๋ฆฌ์ŠคํŠธ์— ๋„ฃ์Œ
        visited[i] = True
        s.append(i)
        DFS()  # ํ•จ์ˆ˜ ๋‹ค์‹œ ํ˜ธ์ถœ
        s.pop()  # ์›์ƒ๋ณต๊ท€ ๊ณผ์ • ํ•„์š”
        visited[i] = False


        
N, M = map(int, input().split())  # N:์ฃผ์–ด์ง„ ์ˆ˜, M:์ˆ˜์—ด์˜ ๊ธธ์ด
s = []  # ์ถœ๋ ฅ ์ˆ˜์—ด ๋„ฃ์„ ๋ฆฌ์ŠคํŠธ (stack)
visited = [False] * (N+1)  # ๋ฐฉ๋ฌธ์ฒดํฌ ํ•  ๋ฆฌ์ŠคํŠธ
DFS()

 

์ฝ”๋“œ2

์Šคํƒ์œผ๋กœ๋งŒ ํ‘ผ ํ’€์ด

def DFS():
    if len(s) == M:
        print(*s)
        return

    for i in range(1, N+1):
        if i in s:
            continue

        s.append(i)
        DFS()  # ํ•จ์ˆ˜ ๋‹ค์‹œ ํ˜ธ์ถœ
        s.pop()  # ์›์ƒ๋ณต๊ท€


        
N, M = map(int, input().split())
s = []  # ์ถœ๋ ฅ ์ˆ˜์—ด ๋„ฃ์„ stack
DFS()

 

 

ํ•œ์ค„ํ›„๊ธฐ

DFS ์—ด๊ณตํ•˜์ž

๋Œ“๊ธ€