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

 

11724번: 연결 요소의 개수

첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다.

www.acmicpc.net

연결 요소를 구하는 문제 입니다..

 

연결요소의 정확한 정의가 나와있지 않아 감은 대충 왔으나 검색을 한번 해보고 문제를 풀었습니다.

 

문제를 분석 하고는 dfs로 푸는 것이 편하겠다 싶어 dfs로 풀었습니다.

 

정점 index 순서대로 dfs를 도는데 이미 방문한 정점이면 dfs를 돌지 않습니다.

 

그리고 저는 처음에 아무것도 연결되지 않은 정점은 연결요소로 count를 하지 않는 다고 생각했으나

 

그럴 경우도 연결요소로 count를 하셔야 합니다 (즉 , 입력(6, 0) ---정점만 6개 일경우 결과값은 6입니다.)

 

은근 저와같은 생각을 하신분들이 있으시리라 생각합니다.....

 

그 외에는 쉬운 문제입니다.

 

<풀이>

<코드>

 

'알고리즘 문제풀이 > DFS와 BFS' 카테고리의 다른 글

백준 2583  (0) 2020.03.02
백준 14502  (0) 2020.02.17
백준 2178  (0) 2020.01.14
백준 1260  (0) 2020.01.14
백준 2667  (0) 2020.01.14

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

 

2178번: 미로 탐색

첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.

www.acmicpc.net

문제를 분석해 보면 최소한의 점

 

시작하는위치(1,1) 과 가야하는점(N,M)은 정해져 있습니다.

 

어떻게 하면 최단거리로 갈 수 있는지를 구하는 문제인데

 

DFS로 구현할경우 시간초과의 문제를 겪을 수 있습니다.(최악의경우)

 

BFS 냄새가 풀풀...

 

BFS를 돌면서 큐에다가 다음 깊이의 점들을 모두 넣는 식입니다.

 

그렇게 하다가 목적지가 맞을경우 BREAK 하도록!

 

기본적인 BFS문제가 아닐까 싶습니다.

 

 

 

<MAIN> 함수 입니다.

 

 

'알고리즘 문제풀이 > DFS와 BFS' 카테고리의 다른 글

백준 2583  (0) 2020.03.02
백준 14502  (0) 2020.02.17
백준 11724  (0) 2020.02.13
백준 1260  (0) 2020.01.14
백준 2667  (0) 2020.01.14

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

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다.

www.acmicpc.net

 

DFS와 BFS를 탐색을 하는 기본문제입니다.

 

개념을 익히는 정도 라고 하면 되겠네요!

 

깊이우선 탐색을 먼저 하고 너비우선 탐색을 하면 됩니다.

 

이차원 배열을 통해서 점과 점이 연결되었는지 여부를 확인(간선)

 

간선은 입력받을떄 [x][y] =1은 물론 [y][x]=1도 넣어주었습니다(양방향 간선 이므로)

 

일차원 배열을 통해 방문을 했는지 여부를 확인하는 용도로 사용하였습니다.

 

<main> 함수

 

'알고리즘 문제풀이 > DFS와 BFS' 카테고리의 다른 글

백준 2583  (0) 2020.03.02
백준 14502  (0) 2020.02.17
백준 11724  (0) 2020.02.13
백준 2178  (0) 2020.01.14
백준 2667  (0) 2020.01.14

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

 

2667번: 단지번호붙이기

<그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집들의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. <그림 2>는 <그림 1>을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를 출력하고, 각 단지에 속하는 집의 수

www.acmicpc.net

DFS 기본 문제 느낌이였습니다.

 

깊이우선 탐색입니다.

 

한 점(집) 을 발견하면 일단 그 집과 연결된 모든 집을 탐색하고(탐색하면서 방문 했다고 체크)

 

다음에 FOR문을 돌때는 집이 있어도 이미 방문되었다고 표시가 되어 있으면

 

DFS를 돌지 않도록 하였습니다.

 

MAP은 그냥 정적으로 만들었고 (N)값 범위가 정해져 있으므로 N의 최대값으로 설정 하였습니다.

 

체크나 출력은 N값을 이용하면 되므로..

 

'알고리즘 문제풀이 > DFS와 BFS' 카테고리의 다른 글

백준 2583  (0) 2020.03.02
백준 14502  (0) 2020.02.17
백준 11724  (0) 2020.02.13
백준 2178  (0) 2020.01.14
백준 1260  (0) 2020.01.14

+ Recent posts