본문 바로가기

Algorithm/DFS, BFS

(5)
백준 영역 구하기(2583) C++ 풀이 알고리즘 영역 그래프 이론 그래프 탐색 너비 우선 탐색 깊이 우선 탐색 문제 해결 아이디어 연결되어 있는 빈칸의 개수를 DFS를 통해 연결하여 개수를 세어 출력하면 된다. 코드 #include #include #include using namespace std; int m, n, k; int arr[101][101]; // 상하좌우 세팅 int dirX[] = { 0, 0, -1, 1 }; int dirY[] = { -1, 1, 0, 0 }; int cnt = 0; vector result; int dfs(int y, int x) { // 방문처리 arr[y][x] = 1; count +1 증가 cnt++; // 상하좌우 탐색 for (int i = 0; i < 4; i++) { int _y = y + ..
백준 유기농 배추(1012) C++ 풀이 알고리즘 영역 그래프 이론 그래프 탐색 너비 우선 탐색 깊이 우선 탐색 문제 해결 아이디어 DFS를 이용하여 붙여있는 1의 개수를 세워 출력하면 됩니다. 위의 사진은 총 5마리의 배추휜지렁이가 필요합니다. 코드 #include using namespace std; int t, m, n, k, cnt = 0; int arr[51][51] = { 0, }; // 상하좌우 세팅 int dirX[] = { -1,1,0,0 }; int dirY[] = { 0,0,-1,1 }; void dfs(int y, int x) { // 0으로 바꾸기(방문처리) arr[y][x] = 0; // 상하좌우 탐색 for (int i = 0; i < 4; i++) { int _y = dirY[i] + y; int _x = dirX[..
백준 미로탐색(2178) C++ 풀이 알고리즘 영역 그래프 이론 그래프 탐색 너비 우선 탐색 문제 해결 아이디어 (0,0)부터 시작하여 BFS를 이용하여 전 거리에 +를 하여 도착지점까지 가면 된다. BFS: 가중치가 같으면 최단 거리를 찾을 수 있다. 코드 #include #include using namespace std; int n, m; int arr[101][101]; //배열 int dist[101][101]; //거리 // 상하좌우 세팅 int dirX[] = { -1,1,0,0 }; int dirY[] = { 0,0,-1,1 }; void bfs(int y, int x) { queue q; //(y,x) q.push(make_pair(y, x)); arr[y][x] = 0; // 방문 처리 dist[y][x] = 1; //거리..
백준 안전 영역(2468) C++ 풀이 알고리즘 영역 그래프 이론 브루트포스 알고리즘 그래프 너비 우선 탐색 깊이 우선 탐색 문제해결 아이디어 잠기는 영역들은 미리 방문 처리를 하고, DFS(깊이 우선 탐색)을 통해 각각의 연결된 영역들을 체크하여 개수를 세면 된다. 코드 #include using namespace std; int n; // 행과 열의 개수 int arr[101][101]; // 비의 양을 저장하는 2차원 배열 bool visited[101][101]; // 방문했는가?를 판단하는 2차원 배열 int maxH = 0; // 입력된 비의 양의 최대 int maxCnt = 0; // 안전한 영역의 최대 개수 int cnt = 0; // 안전한 영역을 세는 변수 // 상하좌우 세팅 int dirX[] = { -1,1,0,0 }; ..
백준 말이 되고픈 원숭이(1600) C++ 풀이 알고리즘 분류 그래프 이론 그래프 탐색 너비 우선 탐색(BFS) 문제 해결 아이디어 BFS를 이용하여 K의 값이 0보다 크면 현 위치에서 말의 움직임으로 갈 수 있는 곳을 체크하여 Queue에 넣는다. 그 다음 상하좌우로 갈 수 있는 곳을 체크 한 후 Queue에 넣어, 최종적으로 도착지점에 도달하면 Cost를 출력한다. 코드 #include #include using namespace std; int k; int map[201][201]; bool visited[201][201][31]; int w, h; // 상하좌우 움직임 int dirX[4] = { -1,1,0,0 }; int dirY[4] = { 0,0,-1,1 }; // 말의 움직임 int horseX[8] = { -1,-1,1,1,-2,-2..