패스 이유 밑에 설명.
https://swexpertacademy.com/main/solvingProblem/solvingProblem.do
#include <iostream>
#include <vector>
#include <algorithm>
#include <iostream>
#include <string>
#include <queue>
using namespace std;
int arr_size;
int arr[1000][1000] = { 0, };
int chk[1000][1000] = { 0, };
int dirX[4] = { 1,0,-1,0 };
int dirY[4] = { 0,-1,0,1, };
vector<pair<int, int>> vResult;
void init()
{
for (int i = 0; i < arr_size; i++)
{
for (int j = 0; j < arr_size; j++)
{
arr[i][j] = 0;
chk[i][j] = 0;
}
}
}
void init_chk()
{
for (int i = 0; i < arr_size; i++)
{
for (int j = 0; j < arr_size; j++)
{
chk[i][j] = 0;
}
}
}
void bfs(int y, int x)
{
int iStart = arr[y][x];
int imax = 1;
queue<pair<int, int>> qTemp;
chk[y][x] = 1;
qTemp.push(make_pair(y, x));
while (!qTemp.empty())
{
int yTemp = qTemp.front().first;
int xTemp = qTemp.front().second;
qTemp.pop();
for (int i = 0; i < 4; i++)
{
int ny = dirY[i] + yTemp;
int nx = dirX[i] + xTemp;
if (ny >= 0 && ny < arr_size && nx >= 0 && nx < arr_size && (chk[ny][nx] == 0))//기본 바운더리 내에 있는 조건입니다.
{
if ((arr[ny][nx] == arr[yTemp][xTemp] + 1) && (arr[yTemp][xTemp]>=1))//방문한적 없고 다음 방문 조건입니다. 다음 가는 곳이 이전에 있는 배열 +1 의 값인 경우입니다.
{
imax++;
chk[ny][nx] = 1;
qTemp.push(make_pair(ny, nx));
break;
}
}
}
}
vResult.emplace_back(make_pair(imax, iStart));//시작점의 값과 그에따른 해당값입니다.
}
int main()
{
int test_case; cin >> test_case;
for (int test = 1; test <= test_case; test++)
{
init();
int seperate_case; cin >> seperate_case;
arr_size = seperate_case;
vResult.clear();
for (int i = 0; i < seperate_case; i++)
{
for (int j = 0; j < seperate_case; j++)
{
int iTemp; cin >> iTemp;
arr[i][j] = iTemp;
}
}
for (int i = 0; i < seperate_case; i++)
{
for (int j = 0; j < seperate_case; j++)
{
bfs(i, j);
init_chk();
}
}
sort(vResult.begin(), vResult.end(), [](pair<int, int> a, pair<int, int> b) {
if (a.first == b.first)
{
return a.second<b.second;//만약 이동할 수 있는 방의 개수가 최대인 방 여러개면 그 중 작은수
}
else
{
return a.first > b.first;//내림차순으로 정렬합니다.
}
});
cout << "#" << test << " " << vResult[0].second<<" "<<vResult[0].first << endl;
}
}
2차원 배열 전체bfs하는게 중요하고,
chk방문기록 초기화 중간중간 해줘야함.
문제인건 27전체케이스중 21까지하고 나머지 시간초과 뜨는게 문제이다.
논리적으로 딱히 시간 더이상 줄일데가 별로 없고,
구글링 답지해도 괜찮은 답이 없어서.
일단 패스한다.
논리는 맞음. 시간초과 발생