clamp
Clamp
clamp
글쓰기 관리
전체 방문자
오늘
어제
  • 분류 전체보기 (509)
    • IOS (85)
    • SwiftUI+TCA+Combine (9)
    • RxSwift + MVVM (56)
    • Clean Architecture (12)
    • SWIFT (56)
    • iOS - TDD (2)
    • 디자인패턴 (4)
    • CS (56)
      • 알고리즘 (29)
      • 운영체제 (15)
      • 자료구조 (2)
      • 네트워킹 (4)
      • 기타 (6)
    • 회고 (0)
    • Firebase (18)
    • SwiftUI (10)
    • iOS - UIKit (11)
    • iOS - 오픈소스 (6)
    • 코딩테스트 (166)
      • 프로그래머스 (164)
    • 정보처리기사 (14)
    • GitHub (2)
글쓰기 / 관리자

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • uikit
  • Swift
  • ㅅ
  • Q

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
clamp

Clamp

알고리즘 - 그래프 탐색 알고리즘 구현(DFS)[Swift]
CS/알고리즘

알고리즘 - 그래프 탐색 알고리즘 구현(DFS)[Swift]

2023. 1. 6. 20:18

1. 간선의 배열과 노드의 개수가 주어졌을 때

위 그래프를 인접행렬의 이차원 배열로 만든다면 아래와 같다.

1 1 0 0 0 0 0 0
1 1 1 1 0 0 0 0
0 1 1 1 0 1 0 0
0 1 1 1 1 0 0 0
0 0 0 1 1 1 1 0
0 0 1 0 1 1 0 1
0 0 0 0 1 0 1 0
0 0 0 0 0 1 0 1
//간선의 배열
let graph = [[1, 1, 0 ,0 ,0 ,0 ,0, 0], [1, 1, 1, 1, 0, 0, 0, 0], [0, 1, 1, 1, 0, 1, 0, 0], 
              [0, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 0], 
              [0, 0, 1, 0, 1, 1, 0, 1], [0, 0, 0, 0, 1, 0, 1, 0], 
              [0, 0, 0, 0, 0, 1, 0, 1]]
//정점의 개수
let n = 8

 dfs 순회

//방문 한 노드인지 체크하기위한 배열
var visited = Array(repeating: false, count: n)

//dfs 알고리즘
func dfs(_ V: Int){
    //방문한 노드인지 check하기 위해 true
    visited[V] = true
    
    //방문한 노드번호 출력
    print(V, terminator: " ")
    
    // 0번노드에 연결된 노드를 찾는다
    for i in 0..<n{
        //예)
        // 1) graph[0][i]를 보게되면 [1, 1, 0, 0, 0, 0, 0, 0] 이다.
        // 2) 0번 노드에 인접한 노드는 0번 노드와 1번노드뿐인데 0번노드는 이미 ture 1번노드는 false
        // 3) 인접한 노드인 1번 노드로 이동
        // 1 ~ 3을 반복
        // * graph[V][i] == 1 && !visited[i] -> 현재 간선에 연결된 노드가 존재하고 아직 방문하지 않았으면!
        if graph[V][i] == 1 && !visited[i]{    //!visited[i] 는 i번째 노드를 방문하지 않았을 경우 ture이다.
            dfs(i)
            //만약 dfs(0)이 실행돼서 graph[0][i]가 진행중이다가
            //graph[0][1]이 되어 1번노드가 연결되어 있다는걸 알았을 때!
            //graph[1][i]이 되어 1번노드에 연결된 노드를 찾는다
        }
    }
}

//0번노드부터 순회
dfs(0)

주석없는 ver

var visited = Array(repeating: false, count: n)

func dfs(_ V: Int){
    visited[V] = true
    
    print(V, terminator: " ")
    
    for i in 0..<n{
        if graph[V][i] == 1 && !visited[i]{
            dfs(i)
        }
    }
}

dfs(0)
저작자표시 비영리 동일조건 (새창열림)
    'CS/알고리즘' 카테고리의 다른 글
    • 알고리즘 - 조합(Conbinations) 구현[Swift]
    • 그래프, BSF 구현[Swift]
    • 알고리즘 - DFS BFS
    • 알고리즘 - 순열(Permutation Algorithm)
    clamp
    clamp
    주니어 iOS개발자의 발악!!!!!!!

    티스토리툴바