POJ

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;
}
原文地址:https://www.cnblogs.com/lukelmouse/p/12450396.html