알고리즘

[백준1260] DFS와 BFS

제이G 2022. 7. 2. 10:43

DFS

 

		visit[start] = true;
		sb.append(start + " ");
		dfs(start, board);
		sb.append("\n");
	}
	static void dfs(int node, int[][] board) {
		
		//recursive case
		for (int i=1; i<=N; i++) {
			if (!visit[i] && board[node][i]==1) {
				visit[i] = true;
				sb.append(i + " ");
				dfs(i, board);
			}
		}
	}

*트리 그려놓고 차근히 진행

 

 

BFS

		bfs(start, board);
        
static void bfs(int node, int[][] board) {
		
		Queue<Integer> queue = new LinkedList<>();
		queue.add(node);
		visit2[node] = true;
		sb.append(node + " ");
		while(queue.size()!=0) {
			
			int visited = queue.poll();
			for (int i=1; i<=N; i++) {
				
				if(!visit2[i] && board[visited][i]==1) {
					queue.add(i);
					visit2[i] = true;
					sb.append(i + " ");
				}
			}
		}
	}

*주의* : 

큐에 넣는 행위를 방문(visit check)이라고 하자. 큐에서 빼는 행위를 방문(visit check)이라고 하면 큐의 작업프로세스 중 문제가 발생

 

*트리 그려놓고 진행하자.