알고리즘 풀이

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;
}