#include <iostream>
#include <string.h>
#include <vector>
#include <stack>
#include <tuple>
int R = 0;
int C = 0;
std::vector<std::string> vec = {};
bool visit[27] = {};
int iDirX[4] = { 0,0,1,-1 };
int iDirY[4] = { 1,-1,0,0 };
void CheckStack(int iCount, int iX, int iY, int& answer)
{
answer = std::max(answer, iCount);
for (int i = 0; i < 4; ++i)
{
int iNextX = iX + iDirX[i];
int iNextY = iY + iDirY[i];
if (iNextX >= 0 && iNextX < R &&
iNextY >= 0 && iNextY < C)
{
if (!visit[vec[iNextX][iNextY] - 'A'])
{
visit[vec[iNextX][iNextY] - 'A'] = true;
CheckStack(iCount + 1, iNextX, iNextY, answer);
visit[vec[iNextX][iNextY] - 'A'] = false;
}
}
}
}
int main()
{
int iAnswer = 0;
std::cin >> R >> C;
for (int i = 0; i < R; ++i)
{
std::string s = {};
std::cin >> s;
vec.push_back(s);
}
visit[vec[0][0] - 'A'] = true;
CheckStack(1, 0, 0, iAnswer);
std::cout << iAnswer;
}
1. string 형식이라 'A'를 빼고난 방식이 중요했다.
2. DFS로 기억해나가면서 풀어야했다.
'오늘의 알고리즘' 카테고리의 다른 글
[C++] 백준 2206 벽 부수고 이동하기 (0) | 2022.05.25 |
---|---|
[C++] 백준 20055 컨베이어 벨트 위 (0) | 2022.05.24 |
[C++] 백준 10830 행렬 제곱 (0) | 2022.05.21 |
[C++] 백준 11401 이항 계수 3 (0) | 2022.05.20 |
[C++] 백준 1655 가운데를 말해요 (0) | 2022.05.19 |