알고리즘 풀이
1743. 음식물 피하기
남생이야
2023. 12. 25. 23:08
https://www.acmicpc.net/problem/1743
깊이 우선 탐색을 써서 풀어냈다. 4방향을 검사해야 해서 dx, dy 배열 변수를 추가하고
4방향을 검사해서 갈 수 있는지와 범위 내에 있는지 검사를 해야 했다.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <string>
#include <queue>
#include <cmath>
using namespace std;
#define MAX 101
int arr[MAX][MAX];
bool visited[MAX][MAX];
int dx[4] = { -1,1, 0, 0 };
int dy[4] = { 0 , 0 ,-1, 1 };
int check;
int maxHack;
int n, m, k;
vector<pair<int, int>> ans;
void dfs(int y, int x)
{
visited[y][x] = true;
check++;
for (int i = 0; i < 4; i++)
{
int nx = x + dx[i];
int ny = y + dy[i];
if(nx >= 0 && nx < m && ny >= 0 && ny < n &&
visited[ny][nx] == false && arr[ny][nx] == 1)
{
dfs(ny,nx);
}
}
}
int main() {
cin >>n >> m >> k;
for (int i = 0; i < k; i++)
{
int r, c;
cin >> r >> c;
arr[r-1][c-1] = 1;
}
int max = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
check = 0;
if (visited[i][j] == false && arr[i][j] == 1)
{
dfs(i, j);
if (check > max)
max = check;
}
}
}
cout << max;
return 0;
}