题目链接
每个位置可以重复利用,组成6位数字,上下左右走,问可以组成的个数
直接dfs找到所有组成数然后丢到set容器中(不重复)最后输出set大小即可
#include<iostream>
#include<cstring>
#include<set>
using namespace std;
int map[5][5];
int ans[111100];
set<int>P;
int dr[][2] = { {0,1},{0,-1},{-1,0},{1,0} };
int cnt =0;
int num = 0;
void dfs(int x, int y,int num) {
if (num >= 1000000) {
P.insert(num);
return;
}
for (int i = 0; i <4; i++) {
int nx =x + dr[i][0];
int ny = y + dr[i][1];
if (nx < 5 && nx >= 0 && ny <5 && ny >= 0) {
dfs(nx, ny, num * 10 + map[nx][ny]);
}
}
}
int main()
{
memset(ans, 0, sizeof(ans));
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
cin >> map[i][j];
}
}
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
dfs(i, j, 10 + map[i][j]);
}
}
cout <<P.size()<< endl;
return 0;
}