思路:dfs,以每個格子爲起點,上下左右搜索,6次截至(step=5,從0開始),到達過的數字用vis記錄,避免重複。
AC代碼:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <cmath>
using namespace std;
int grid[5][5];
int ans=0;
int vis[999999];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
void dfs(int x,int y,int step,int num)
{
int i,j;
if(step==5){
if(vis[num]==0){
ans++;
vis[num]=1;
}
return;
}
for(i=0;i<4;i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(nx>=0 && nx<5 && ny>=0 && ny<5){
dfs(nx,ny,step+1,num+grid[nx][ny]*pow(10.0,5-step));
}
}
}
int main()
{
int i,j;
for(i=0;i<5;i++){
for(j=0;j<5;j++){
scanf("%d",&grid[i][j]);
getchar();
}
}
for(i=0;i<5;i++){
for(j=0;j<5;j++){
dfs(i,j,0,grid[i][j]);
}
}
printf("%d",ans);
return 0;
}