题目链接
思路
dfs
时间复杂度
$$ O(5 * 5 * 4^6) $$
代码
#include <cstdio>
#include <set>
using namespace std;
const int MAXN = 10;
int a[MAXN][MAXN];
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
set<int> st;
bool check(int x, int y) {
if (1 <= x && x <= 5 && 1 <= y && y <= 5) {
return true;
} else {
return false;
}
}
void dfs(int x, int y, int step, int v) {
if (step > 6) {
st.insert(v);
return;
}
v *= 10;
v += a[x][y];
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (check(nx, ny)) {
dfs(nx, ny, step + 1, v);
}
}
}
int main() {
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5; j++) {
scanf("%d", &a[i][j]);// don't forget &
}
}
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5; j++) {
dfs(i, j, 1, 0);
}
}
printf("%d", (int)st.size());
return 0;
}