-
1303번 전쟁-전투 | BFS, DFS | Baekjoon BOJ 백준 1303 C++ 코드[백준 알고리즘]/[C++] 2021. 2. 11. 20:03728x90반응형
이번 포스팅은 백준 1303번 전쟁-전투입니다.
아래 url를 클릭하시면 백준 사이트에서 문제를 볼 수 있습니다.
1303번: 전쟁 - 전투
첫째 줄에는 전쟁터의 가로 크기 N, 세로 크기 M(1 ≤ N, M ≤ 100)이 주어진다. 그 다음 두 번째 줄에서 M+1번째 줄에는 각각 (X, Y)에 있는 병사들의 옷색이 띄어쓰기 없이 주어진다. 모든 자리에는
www.acmicpc.net
기본 알고리즘
BFS 너비 우선 탐색
DFS 깊이 우선 탐색
더보기문제를 읽자!
첫째 줄에는 전쟁터의 가로 크기 N, 세로 크기 M(1 ≤ N, M ≤ 100)이 주어진다.
전체 코드
BFS 너비 우선 탐색
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <queue>using namespace std;int N, M;const int MAX = 101;char input[MAX][MAX];int map[MAX][MAX] = { 0, };bool visited[MAX][MAX] = { 0, };int dy[] = { 1,-1,0,0 };int dx[] = { 0,0,-1,1 };int wSum = 0; //W병사 위력 합int bSum = 0; //B병사 위력 합int s = 1; //뭉친 병사 수queue<pair<int, int>> q;void BFS(int y, int x) {visited[y][x] = true;q.push(make_pair(y, x));while (!q.empty()) {y = q.front().first;x = q.front().second;q.pop();for (int i = 0; i < 4; i++) {int ny = y + dy[i];int nx = x + dx[i];if (ny < 0 || nx < 0 || ny >= M || nx >= N)continue;if (map[ny][nx] == 1 && visited[ny][nx] == 0) {visited[ny][nx] = true;s++;q.push(make_pair(ny, nx));}}}}void reset() {for (int i = 0; i < M; i++) {for (int j = 0; j < N; j++) {visited[i][j] = 0;map[i][j] = 0;}}}int main() {cin >> N >> M;/*입력 받기*/for (int i = 0; i < M; i++) {for (int j = 0; j < N; j++) {scanf("%1s", &input[i][j]);}}/*W=1, B=0로 변환하여 map에 저장*/for (int i = 0; i < M; i++) {for (int j = 0; j < N; j++) {if (input[i][j] == 'W') {map[i][j] = 1;}}}/*W의 BFS*/for (int i = 0; i < M; i++) {for (int j = 0; j < N; j++) {if (map[i][j] == 1 && visited[i][j] == 0) {BFS(i, j);wSum += s * s;s = 1;}}}/*map, visited 초기화*/reset();/*B=1, W=0로 변환하여 map에 저장*/for (int i = 0; i < M; i++) {for (int j = 0; j < N; j++) {if (input[i][j] == 'B') {map[i][j] = 1;}}}/*B의 BFS*/for (int i = 0; i < M; i++) {for (int j = 0; j < N; j++) {if (map[i][j] == 1 && visited[i][j] == 0) {BFS(i, j);bSum += s * s;s = 1;}}}cout << wSum << " " << bSum;}cs DFS 깊이 우선 탐색
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;int N, M;const int MAX = 101;char input[MAX][MAX];int map[MAX][MAX] = { 0, };bool visited[MAX][MAX] = { 0, };int dy[] = { 1,-1,0,0 };int dx[] = { 0,0,-1,1 };int wSum = 0; //W병사 위력 합int bSum = 0; //B병사 위력 합int s = 1; //뭉친 병사 수void DFS(int y, int x) {visited[y][x] = true;for (int i = 0; i < 4; i++) {int ny = y + dy[i];int nx = x + dx[i];if (ny < 0 || nx < 0 || ny >= M || nx >= N)continue;if (map[ny][nx] == 1 && visited[ny][nx] == 0) {visited[ny][nx] = true;s++;DFS(ny, nx);}}}void reset() {for (int i = 0; i < M; i++) {for (int j = 0; j < N; j++) {visited[i][j] = 0;map[i][j] = 0;}}}int main() {cin >> N >> M;/*입력 받기*/for (int i = 0; i < M; i++) {for (int j = 0; j < N; j++) {scanf("%1s", &input[i][j]);}}/*W=1, B=0로 변환하여 map에 저장*/for (int i = 0; i < M; i++) {for (int j = 0; j < N; j++) {if (input[i][j] == 'W') {map[i][j] = 1;}}}/*W의 DFS*/for (int i = 0; i < M; i++) {for (int j = 0; j < N; j++) {if (map[i][j] == 1&&visited[i][j]==0) {DFS(i, j);wSum += s * s;s = 1;}}}/*map, visited 초기화*/reset();/*B=1, W=0로 변환하여 map에 저장*/for (int i = 0; i < M; i++) {for (int j = 0; j < N; j++) {if (input[i][j] == 'B') {map[i][j] = 1;}}}/*B의 BFS*/for (int i = 0; i < M; i++) {for (int j = 0; j < N; j++) {if (map[i][j] == 1 && visited[i][j] == 0) {DFS(i, j);bSum += s * s;s = 1;}}}cout << wSum << " " << bSum;}cs 728x90반응형'[백준 알고리즘] > [C++]' 카테고리의 다른 글
1325번 효율적인 해킹 | BFS, DFS | Baekjoon BOJ 백준 1325 C++ 코드 (0) 2021.02.19 10026번 적록색약 | DFS | 백준 10026 C++ 코드 (0) 2021.02.11 1926번 그림 | BFS, DFS | Baekjoon BOJ 백준 1926 C++ 코드 (0) 2021.02.11 11050번 이항 계수 1 | Baekjoon BOJ 백준 11050 C++ 코드, 해설, 풀이 (0) 2021.02.09 11725번 트리의 부모 찾기 | BFS, DFS | Baekjoon BOJ 백준 11725 C++ 코드, 해설, 풀이 (0) 2021.02.09