思路:对每一个格子来一个DFS,每个DFS跳五步
代码如下:
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <set> 5 6 using namespace std; 7 8 int maze[5][5]; 9 int dx[4]={1,-1,0,0}; 10 int dy[4]={0,0,1,-1}; 11 set<int> st; 12 13 void dfs(int x,int y,int k,int num){ 14 if(k==5){ 15 st.insert(num); return; 16 } 17 for(int i=0;i<4;i++){ 18 int nx = x+dx[i], ny = y+dy[i]; 19 if(0<=nx&&nx<5&&ny>=0&&ny<5){ 20 k++; 21 dfs(nx,ny,k,num*10+maze[nx][ny]); 22 k--; 23 } 24 } 25 } 26 27 void solve(){ 28 for(int i=0;i<5;i++){ 29 for(int j=0;j<5;j++){ 30 scanf("%d",&maze[i][j]); 31 } 32 } 33 for(int i=0;i<5;i++){ 34 for(int j=0;j<5;j++){ 35 dfs(i,j,0,maze[i][j]); 36 } 37 } 38 printf("%d\n", st.size()); 39 } 40 41 int main(){ 42 solve(); 43 return 0; 44 }