-
고민
지나간 자리를 다시 지나갈 수 있으니 순회했던 정보를 저장하지 않고 배열을 돌아다니는 방법을 택했다. 6번 순회하는 도중의 정보를 전부 저장한 다음, 저장한 정보의 중복을 제거하면 만들 수 있는 여섯자리수를 구할 수 있는 문제였다.
-
// https://www.acmicpc.net/problem/2210 #include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; int map[6][6]; vector<string> ans; int dx[4] = { -1, 1, 0, 0 }; int dy[4] = { 0, 0, 1, -1 }; void route(string s, int x, int y) { s += map[x][y] + '0'; if (s.size() == 6) { ans.push_back(s); return; } for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if (nx >= 1 && nx <= 5 && ny >= 1 && ny <= 5) { route(s, nx, ny); } } } int main() { ios::sync_with_stdio; for (int i = 1; i <= 5; i++) { for (int j = 1; j <= 5; j++) { cin >> map[i][j]; } } for (int i = 1; i <= 5; i++) { for (int j = 1; j <= 5; j++) { route("", i, j); } } sort(ans.begin(), ans.end()); vector<string>::iterator iter; iter = unique(ans.begin(), ans.end()); ans.erase(iter, ans.end()); cout << ans.size() << '\n'; return 0; }