본문 바로가기

백준/BFS

(17)
벽부수고이동하기4 - 플러드 필 www.acmicpc.net/problem/16946 16946번: 벽 부수고 이동하기 4 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 한 칸에서 다른 칸으로 이동하려면, 두 칸이 인접해야 한다. 두 칸이 www.acmicpc.net #include #include #include #include #include #include #include using namespace std; int n; int m; int check[1001][1001]; //전역변수로 1000*1000은 가능 int arr[1001][1001]; int dx[] = {1,-1,0,0}; int dy[] = { 0,0,1,-1 }; int bfs..
벽 부수고 이동하기 www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net /* 벽부수고 이동하기 2206번 */ #include #include #include #include #include using namespace std; int d[1005][1005]; int check[1005][1005][2]; int dx[] = { -1,1,0,0 }; int dy[] = { 0,0,-1,1 }; queue q; int n, m; int func(int x,..
돌 그룹 www.acmicpc.net/problem/12886 12886번: 돌 그룹 오늘 강호는 돌을 이용해 재미있는 게임을 하려고 한다. 먼저, 돌 세개는 그룹으로 나누어져 있으며 각각의 그룹에는 돌이 A, B, C개가 있다. 강호는 모든 그룹에 있는 돌의 개수를 같게 만들려고 www.acmicpc.net #include #include #include #include #include #include using namespace std; typedef struct { int a; int b; int c; }st; int main() { int arr[3]; for (int i = 0; i > arr[i]; } queueq; setcheck; q.push({arr[0],arr[1]..
데스 나이트 www.acmicpc.net/problem/16948 16948번: 데스 나이트 게임을 좋아하는 큐브러버는 체스에서 사용할 새로운 말 "데스 나이트"를 만들었다. 데스 나이트가 있는 곳이 (r, c)라면, (r-2, c-1), (r-2, c+1), (r, c-2), (r, c+2), (r+2, c-1), (r+2, c+1)로 이동할 수 있다. 크 www.acmicpc.net #include #include #include #include using namespace std; int dx[] = { -2,-2,0,0,2,2 }; int dy[] = { -1,1,-2,2,-1,1 }; int n; int bfs(int arr[200][200],int r1, int c1, int r2, int c2) { qu..
연구소 #include #include #include #include using namespace std; int dx[] = { -1,1,0,0 }; int dy[] = { 0,0,-1,1 }; int n, m; int bfs(vectorarr, vector&virus) { queueq; int count = 0; for (auto t : virus) { q.push(t); while (!q.empty()) { int x = q.front().first; int y = q.front().second; q.pop(); for (int i = 0; i =0 && nx=0 && ny> n; cin >> m; f..
뱀과 사다리 게임 www.acmicpc.net/problem/16928 16928번: 뱀과 사다리 게임 첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x > n; cin >> m; int ls[105]; memset(check,-1,sizeof(check)); memset(..
BFS 스페셜 저지 문제 BOJ에서 정답이 여러가지인 경우에는 스페셜 저지를 사용한다. 스페셜 저지는 유저가 출력한 답을 검증하는 코드를 통해서 정답 유무를 결정하는 방식이다. 오늘은 스페셜 저지 코드를 하나 만들어보려고 한다. 정점의 개수가 N이고, 정점에 1부터 N까지 번호가 매겨져있는 양방향 그래프가 있을 때, BFS 알고리즘은 다음과 같은 형태로 이루어져 있다. 큐에 시작 정점을 넣는다. 이 문제에서 시작 정점은 1이다. 1을 방문했다고 처리한다. 큐가 비어 있지 않은 동안 다음을 반복한다. 큐에 들어있는 첫 정점을 큐에서 꺼낸다. 이 정점을 x라고 하자. x와 연결되어 있으면, 아직 방문하지 않은 정점 y를 모두 큐에 넣는다. 모든 y를 방문했다고 처리한다. 2-2 단계에서 방문하지 않은 정점을 방문하는 순서는 중..
육각보드 문제 크기가 N × N인 육각 보드가 주어진다. 아래 그림은 N = 1, 2, 3, 4인 경우의 그림이다. 육각 보드의 일부 칸을 색칠하려고 한다. 두 칸이 변을 공유하는 경우에는 같은 색으로 칠할 수 없다. 어떤 칸을 색칠해야 하는지 주어졌을 때, 필요한 색의 최소 종류를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. (1 ≤ N ≤ 50) 둘째 줄부터 N개의 줄에는 어떤 칸을 색칠해야 하는지에 대한 정보가 주어진다. i번째 줄의 j번째 문자는 (i, j)칸의 정보를 나타내고, '-'인 경우는 색칠하지 않는 것이고 'X'면 색칠해야 하는 것이다. 출력 첫째 줄에 필요한 색의 종류의 최솟값을 출력한다. #include #include #include #include #include usi..