-
[DFS] 인접 행렬, 인접 리스트알고리즘 2023. 4. 19. 13:29
세가지 그래프
방향 그래프
무방향 그래프
가중치 그래프
인접 행렬
문제 유형
1) 방향그래프가 주어지고 1번에서 N번으로 가는 모든 경로의 가지 수를 구하시오.
필요 자료구조
- 중복 탐색을 방지하기 위한 check 배열, check 배열은 n+1 크기를 갖는다(1 ~ n)
- 간선 설정을 위한 graph 2차원 배열(행, 열 모두 n+1 크기)
- n개의 정점과, m개의 간선 수 설정
- 문제를 해결하기 위한 DFS 메서드 구현 로직
핵심 로직
public void DFS(int val){ if(val = n) answer++; else{ for(int i = 1; i <= n; i++){ if(graph[v][i] == 1 && ch[i] == 0){ ch[i] = 1; DFS(i+1); ch[i] = 0; // 백트래킹 } } } }
인접리스트
문제 유형
1) 방향그래프가 주어지고 1번에서 N번으로 가는 모든 경로의 가지 수를 구하시오.
장점 ) 인접 행렬보다 시간복잡도가 낮다.
필요 자료구조
- 중복 탐색을 방지하기 위한 check 배열
- 간선 설정을 위한 graph ArrayList 초기화
ArrayList<ArrayList<Integer>> graph = new ArrayList<ArrayLst>(); for(int i = 0; i <= n; i++){ // 정점 수 만큼 초기화 graph.add(new ArrayList<Integer>); } for(int i = 0; i < m; i++){ // 간선 들 초기화 int a = in.nextInt(); int b = in.nextInt(); graph.get(a).add(b); }
- n개의 정점과, m개의 간선 수 설정
- 문제를 해결하기 위한 DFS 메서드 구현 로직
public void DFS(int val){ if(val == n) answer++; else{ for(int nx : graph.get(val)){ if(ch[nx] == 0) { ch[nx] = 1; DFS(nx); ch[nx] = 0; } } } }
'알고리즘' 카테고리의 다른 글
[알고리즘] BFS(Breadth - First Search), 송아지 찾기 (0) 2023.04.13 [자료구조] Queue (0) 2023.04.12 [프로그래머스][기지국설치] (0) 2023.02.09 [프로그래머스][스티커모으기(2)] (0) 2023.02.09 [프로그래머스][숫자 게임] (0) 2023.02.08