POJ - 3050
DFS
POJ 不支持<unordered/set> 只能用set了,不过都差不多。
这题直接枚举每个起点,然后再DFS五个数就行了,插到set里面,最后输出即可。
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <set>
using namespace std;
const int N = 5;
int g[N][N];
int dx[4] = {0,0,1,-1},dy[4] = {1,-1,0,0};
set<int> s;
bool check(int x,int y) {
return x >= 0 && x < 5 && y >= 0 && y < 5;
}
void dfs(int x,int y,int idx,int num) {
if(idx == 6) {
s.insert(num);
return ;
}
for(int i = 0;i < 4; ++i) {
int nx = x + dx[i],ny = y + dy[i];
if(check(nx,ny)) dfs(nx,ny,idx + 1,num * 10 + g[nx][ny]);
}
}
int main() {
for(int i = 0;i < 5; ++i)
for(int j = 0;j < 5; ++j)
scanf("%d",&g[i][j]);
for(int i = 0;i < 5; ++i) {
for(int j = 0;j < 5; ++j) {
dfs(i,j,1,g[i][j]);
}
}
printf("%d
",s.size());
return 0;
}