-
2105. [모의 SW 역량테스트] 디저트 카페SWexpertAcademy 2019. 8. 5. 01:04
#include <iostream> #include<cstring> #include<cstdlib> using namespace std; int tc; int n, result; int map[21][21]; bool r[21][21]; bool d[101]; int sx, sy;//출발위치 int dx[] = { 1,1,-1,-1 };// 방항 중요함 -> 어떤식으로 선택해야할지 int dy[] = { 1,-1,-1,1 }; void dfs(int x, int y, int dir, int cnt) { if (x == sx && y == sy && cnt > 1) {//종결 result = result > cnt ? result : cnt; return; } for (int i = 0; i < 2; i++) {//방향은 딱 두개 -> 배열 초과하게 냅두기 int nx = x + dx[dir + i]; int ny = y + dy[dir + i]; if (nx >= 0 && ny >= 0 && nx < n && ny < n && r[nx][ny] == false && d[map[nx][ny]] == false) { r[nx][ny] = true; d[map[nx][ny]] = true; dfs(nx, ny, dir + i, cnt + 1); r[nx][ny] = false; d[map[nx][ny]] = false; } else if (nx == sx && ny == sy) { cout << endl; cout << sx << " " << sy << endl; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (r[i][j] == true) { cout << 1 << " "; } else cout << 0 << " "; } cout << endl; } dfs(nx, ny, dir + i, cnt + 1); } } } int main() { cin >> tc; for (int t = 1; t <= tc; t++) { //start result = -1; cin >> n; memset(d, false, sizeof(d));//d for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> map[i][j]; r[i][j] = false;//map checking initialized } } for (int i = 0; i < n - 1; i++) { for (int j = 1; j < n - 1; j++) { sx = i; sy = j; d[map[i][j]] = true; dfs(i, j, 0, 0); d[map[i][j]] = false; } } cout << '#' << t << ' ' << result << endl; } }
이거 귀찮게 하나하나 다하는건 쓸모가 없다 어차피 위에서 아래로 사각형을 하나하나 그린다면, 시작행 다음행은
오른쪽위, 왼쪽위 로 갈 필요가없어서 그냥 아래방향으로 dfs해주면 끝
'SWexpertAcademy' 카테고리의 다른 글
1226. [S/W 문제해결 기본] 7일차 - 미로1 (0) 2019.08.13 6109. 추억의 2048게임 (0) 2019.08.10 2117. [모의 SW 역량테스트] 홈 방범 서비스 (0) 2019.07.28 5656. [모의 SW 역량테스트] 벽돌 깨기 (0) 2019.07.27 5653. [모의 SW 역량테스트] 줄기세포배양 (0) 2019.07.26