Created
June 16, 2016 12:59
-
-
Save developer-sdk/c66c3d37a3a704100853d6ddd9b18114 to your computer and use it in GitHub Desktop.
DFS, BFS using ArrayList
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
감사합니다. 참고할게요!