题意:
从任何一个数字出发上下左右找到六个数所组成的数,问有多少个。5*5的方格。
思路:
dfs暴力搜索,注意条件就行。
#include<iostream>
#include<cstdio>
#include<set>
using namespace std;
int a[10][10];
int ans[10000],pos,t;
int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
void dfs(int x,int y,int step)
{
int i;
if(step == 6){
for(i = 0;i < pos; i++){
if(ans[i] == t)
break;
}
if(i == pos){
ans[pos++] = t;
}
return ;
}
for(i = 0;i < 4; i++){
int xx = x + dir[i][0];
int yy = y + dir[i][1];
if(xx < 1 || xx > 5 || yy < 1 || yy > 5)
continue;
t = t*10 + a[xx][yy];
dfs(xx,yy,step + 1);
t = (t-a[xx][yy])/10;
}
}
int main()
{
//freopen("in.txt","r",stdin);
for(int i = 1;i <= 5; i++){
for(int j = 1;j <= 5; j++)
cin>>a[i][j];
}
pos = 0;
for(int i = 1;i <= 5; i++){
for(int j = 1;j <= 5; j++){
t = a[i][j];
dfs(i,j,1);
}
}
cout<<pos<<endl;
return 0;
}