https://www.acmicpc.net/problem/1260

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

 

문제 풀이

https://joe0617160.tistory.com/6

 

[24444] - 알고리즘 수업 - 너비 우선 탐색 1

https://www.acmicpc.net/problem/24444 24444번: 알고리즘 수업 - 너비 우선 탐색 1 첫째 줄에 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N)이 ..

joe0617160.tistory.com

https://joe0617160.tistory.com/8

 

[24479] - 알고리즘 수업 - 깊이 우선 탐색 1

https://www.acmicpc.net/problem/24479 24479번: 알고리즘 수업 - 깊이 우선 탐색 1 첫째 줄에 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N)이..

joe0617160.tistory.com

위 두개를 합친 문제..

using System;
using System.Collections.Generic;
using System.Text;

namespace Baekjoon.Silver
{
    class _1260
    {
        static Dictionary<int, List<int>> graph; //그래프
        static int n; //정점 수
        static int m; //간선 수
        static int v; //시작점
        static bool[] dfs_visit; //dfs 방문표시
        static List<int> dfs_num = new List<int>(); //dfs 방문순서

        static void Main(string[] args)
        {
            int[] a = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
            n = a[0]; m = a[1]; v = a[2];
            graph = new Dictionary<int, List<int>>();
            for (int i = 1; i <= n; i++)
                graph[i] = new List<int>();

            //그래프
            for(int i= 0; i< m; i++)
            {
                int[] point = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
                graph[point[0]].Add(point[1]);
                graph[point[1]].Add(point[0]);
            }

            //정렬
            foreach (int key in graph.Keys)
                graph[key].Sort();

            //초기값 설정
            dfs_visit = new bool[n + 1];
            bool[] bfs_visit = new bool[n + 1]; //bfs 방문표시
            List<int> bfs_num = new List<int>(); //bfs 방문순서
            Queue<int> que = new Queue<int>(); //bfs 큐

            dfs(v);

            bfs_visit[v] = true;
            bfs_num.Add(v);
            que.Enqueue(v); //시작점 넣기
            while (que.Count> 0)
            {
                int point = que.Dequeue();
                
                foreach (int p in graph[point])
                {
                    if (!bfs_visit[p])
                    {
                        bfs_visit[p] = true;
                        bfs_num.Add(p);
                        que.Enqueue(p);
                    }

                }
            }
            Console.WriteLine(String.Join(" ", dfs_num));
            Console.WriteLine(String.Join(" ", bfs_num));
        }

        static void dfs(int v)
        {
            dfs_visit[v] = true;
            dfs_num.Add(v);
            
            foreach (int point in graph[v])
            {
                if (!dfs_visit[point])
                    dfs(point);
            }
        }
    }
}

'문제 풀이 > C#' 카테고리의 다른 글

[16928] - 뱀과 사다리 게임  (0) 2022.10.05
[1012] - 유기농 배추  (0) 2022.10.03
[7569] - 토마토  (0) 2022.10.01
[7576] - 토마토  (0) 2022.10.01
[12865] - 평범한 배낭  (1) 2022.09.30

+ Recent posts