실행해 보면 맞게 잘 됨.. 아마도 과도한 재귀함수 호출로 메모리 초과ㅠㅠ
#include <bits/stdc++.h>
using namespace std;
int r, c;
string graph[20];
vector<char> v;
vector<int> len;
bool dfs(int x, int y)
{
// 주어진 범위를 벗어나는 경우에는 즉시 종료
if (x <= -1 || x >= r || y <= -1 || y >= c)
{
return false;
}
// v에 해당 알파벳이 없다면!
if (find(v.begin(), v.end(), graph[x][y]) == v.end())
{
v.push_back(graph[x][y]); // (x,y)의 알파벳 v에 push
// 상하좌우 살피기
dfs(x - 1, y);
dfs(x + 1, y);
dfs(x, y - 1);
dfs(x, y + 1);
// 더 이상 탐색이 불가능한 경우 현재까지 탐색한 길이 len에 넣고
// 마지막 원소 v에서 삭제! 그리고 다시 돌리고 돌리고...
len.push_back(v.size());
v.erase(v.end() - 1);
return true;
}
return false;
}
int main()
{
// 입력 받기
cin >> r >> c;
for (int i = 0; i < r; i++)
{
cin >> graph[i];
}
// 탐색 시작
dfs(0, 0);
// len에 담긴 길이들 내림차순으로 정렬
sort(len.begin(), len.end(), greater<int>());
// 결과 출력
cout << len[0] << endl;
return 0;
}