Description
Input
Output
Sample Input
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1
Sample Output
15
Hint
111111, 111112, 111121, 111211, 111212, 112111, 112121, 121111, 121112, 121211, 121212, 211111, 211121, 212111, and 212121 can be constructed. No other values are possible.
题目大意:给一个5X5矩阵,问在任意一点出发,向四周走5步有多少种不同的走法;
题解:用set存储序列,每一个点进行dfs,得到的序列转化为一个数字,重复的序列就不会被计入,然后将容器大小输出即可;
AC代码:
#include <iostream> #include <cmath> #include <cstring> #include <algorithm> #include <set> using namespace std ; int dp[6][6] ,vis[6][6],ans; int dir[4][2] = {{-1,0},{1,0},{0,-1},{0,1}}; set<int>ma; void dfs(int x ,int y , int t ,int sum) { if(t==5) { ma.insert(sum); return; } for(int i = 0 ; i < 4 ; i++) { int dx = x + dir[i][0]; int dy = y + dir[i][1]; if(dx>=0&&dx<5&&dy>=0&&dy<5) { dfs(dx,dy,t+1,dp[dx][dy]+sum*10);//*把当前的序列变为一个整数; } } } int main() { for(int i = 0 ; i<5;i++) { for(int j = 0 ;j<5;j++) { cin>>dp[i][j]; } } for(int i = 0 ; i<5;i++) { for(int j = 0 ;j<5;j++) { dfs(i,j,0,dp[i][j]); } } cout<<ma.size()<<endl; }