Tag: Python

0

백준 1260 - DFS와 BFS

링크https://www.acmicpc.net/problem/1260 문제 풀이그래프탐색에 있어 가장 기본적인 DFS, BFS를 사용해볼 수 있는 유형이다. 좌표 자체가 존재하지 않아 1차원적인 check방식을 통해 탐색해 나간다. cpp 코드#include <bits/stdc++.h>using namespace std;// 점점의 개수 : N, 간산의 개수 M, 탐색을 시작할 정점의 번호 Vint N, M, V;bool check_dfs[1010];bool check_bfs[1010];int graph[1010][1010];void bfs(int start) { queue<int> q; q.push(start); check_bfs[start] = true; while (!q.empty()) { int cnt = q.front(); q.pop(); cout << cnt << ' '; for (int i = 1; i <= N; i++) { if (graph[cnt][i] == 1 && check_bfs[i] == false) { check_bfs[i] = true; q.push(i); } } }}void dfs(int depth, int cnt) { check_dfs[cnt] = true; if (N <= depth) { return; } cout << cnt << ' '; for (int i = 1; i <= N; i++) { if (graph[cnt][i] == 1 && check_dfs[i] == false) { dfs(depth + 1, i); } }}int main(void) { cin >> N >> M >> V; for (int i = 0; i < M; i++) { int a, b; cin >> a >> b; graph[a][b] = 1; graph[b][a] = 1; } dfs(0, V); cout << '\n'; bfs(V); return 0;} java 코드import java.io.IOException;import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;public class Main { static int n, m, v; static int map[][]; static boolean bfs_check[]; static boolean dfs_check[]; public static void main(String[] args) throws IOException { Scanner sc = new Scanner(System.in); n = sc.nextInt(); m = sc.nextInt(); v = sc.nextInt(); map = new int[n + 1][n + 1]; for (int i = 0; i < m; i++) { int from, to; from = sc.nextInt(); to = sc.nextInt(); map[from][to] = 1; map[to][from] = 1; } bfs_check = new boolean[n + 1]; dfs_check = new boolean[n + 1]; dfs(v); System.out.println(); bfs(v); sc.close(); } static void dfs(int node) { System.out.print(Integer.toString(node) + ' '); dfs_check[node] = true; for (int i = 1; i <= n; i++) { if (map[node][i] == 1 && dfs_check[i] == false) { dfs(i); } } } static void bfs(int start) { Queue<Integer> q = new LinkedList<Integer>(); q.offer(start); bfs_check[start] = true; System.out.print(Integer.toString(start) + ' '); while (!q.isEmpty()) { int cnt = q.remove(); for (int i = 1; i <= n; i++) { if (map[cnt][i] == 1 && bfs_check[i] == false) { bfs_check[i] = true; q.offer(i); System.out.print(Integer.toString(i) + ' '); } } } }} python 코드