Skip to content

Instantly share code, notes, and snippets.

@developer-sdk
Created June 16, 2016 12:59
Show Gist options
  • Save developer-sdk/c66c3d37a3a704100853d6ddd9b18114 to your computer and use it in GitHub Desktop.
Save developer-sdk/c66c3d37a3a704100853d6ddd9b18114 to your computer and use it in GitHub Desktop.
DFS, BFS using ArrayList
import java.util.ArrayDeque;
import java.util.ArrayList;
public class BreadthFirstSearch {
// 정점의 개수
static int V = 5;
// 발견한 정점을 표시하는 배열
static int[] discovered = new int[V];
// 인접 리스트
static ArrayList<Integer>[] adjList = new ArrayList[V];
// 발견 정점 큐
static ArrayDeque<Integer> queue = new ArrayDeque<>();
public static void main(String[] args) {
adjList[0] = new ArrayList<>();
adjList[0].add(1);
adjList[0].add(2);
adjList[1] = new ArrayList<>();
adjList[1].add(0);
adjList[1].add(2);
adjList[2] = new ArrayList<>();
adjList[2].add(0);
adjList[2].add(1);
adjList[2].add(3);
adjList[2].add(4);
adjList[3] = new ArrayList<>();
adjList[3].add(2);
adjList[4] = new ArrayList<>();
adjList[4].add(2);
bfs();
}
public static void bfs() {
int node;
// 큐에 시작지점 추가 및 발견 표시
queue.add(0);
discovered[0] = 1;
while(queue.size() > 0) {
// 큐에 방문할 정점을 poll
node = queue.pollFirst();
System.out.println(node + 1);
if(adjList[node] != null) {
// 인접정점들을 발견
for(int adjacent : adjList[node]) {
// 이미 발견된 정점이 아니라면
if(discovered[adjacent] == 0) {
// 큐에 추가 및 발견 표시
queue.add(adjacent);
discovered[adjacent] = 1;
}
}
}
}
}
}
import java.util.ArrayList;
public class DepthFirstSearch {
// 정점의 개수
static int V = 5;
// 방문한 정점을 표시하는 배열
static int[] visited = new int[V];
// 인접 리스트
static ArrayList<Integer>[] adjList = new ArrayList[V];
public static void main(String[] args) {
adjList[0] = new ArrayList<>();
adjList[0].add(1);
adjList[0].add(2);
adjList[1] = new ArrayList<>();
adjList[1].add(0);
adjList[1].add(2);
adjList[2] = new ArrayList<>();
adjList[2].add(0);
adjList[2].add(1);
adjList[2].add(3);
adjList[2].add(4);
adjList[3] = new ArrayList<>();
adjList[3].add(2);
adjList[4] = new ArrayList<>();
adjList[4].add(2);
dfs(0);
}
public static void dfs(int node) {
// 방문 정점 표시
visited[node] = 1;
System.out.println(node+1);
if(adjList[node] != null) {
// 모든 인접한 정점들을 방문
for(int adjacent : adjList[node]) {
// 방문한 정점이면 건너 뜀
if(visited[adjacent] == 1) {
System.out.println(adjacent+1);
continue;
}
// 재귀호출
dfs(adjacent);
}
}
}
}
Copy link

ghost commented Sep 1, 2017

감사합니다. 참고할게요!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment