百练4103:踩方格(DFS)
描述
有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设:
a. 每走一步时,只能从当前方格移动一格,走到某个相邻的方格上;
b. 走过的格子立即塌陷无法再走第二次;
c. 只能向北、东、西三个方向走;
请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法只要有一步不一样,即被认为是不同的方案。
输入允许在方格上行走的步数n(n <= 20)输出计算出的方案数量样例输入
2
样例输出
7
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 int a[50][50]; 5 int visit[50][50]; 6 int ways(int i, int j, int n) 7 { 8 if (n == 0)//走0步的走法为1:一步都不走 9 { 10 return 1; 11 } 12 visit[i][j] = 1; 13 int sum = 0; 14 //按北西东的方向走 15 if (!visit[i + 1][j]) 16 { 17 sum += ways(i+1,j,n-1); 18 } 19 if (!visit[i][j-1]) 20 { 21 sum += ways(i, j-1, n - 1); 22 } 23 if (!visit[i][j+1]) 24 { 25 sum += ways(i, j +1, n - 1); 26 } 27 visit[i][j] = 0;//回溯:将(i,j)置为新点 28 return sum; 29 } 30 int main() 31 { 32 int n; 33 memset(a,0,sizeof(a)); 34 memset(visit,0,sizeof(visit)); 35 cin >> n; 36 cout << ways(0,25,n) << endl; 37 return 0; 38 }