算法实践:踩方格

踩方格

描述

每一个人心中都有一个林克。每一个林克都不一样。在命运矩阵里面,随着选择的不同,没有哪一个林克的命运会一模一样。

有一个方格型的命运矩阵,矩阵边界在无穷远处。我们做如下假设:

\1. 每一个格子象征林克命运中的一次抉择,每次只能从相邻的方格中做选择。

\2. 从某个格子出发,只能从当前方格移动一格,走到某个相邻的方格上;

3.选择一旦做出就不可更改,因此走过的格子无法走第二次。

\4. 从命运矩阵的第1行出发,只能向下、左、右三个方向走;

请问:如果最高允许在方格矩阵上走n步(也就是林克一生最多能做n个选择)。
那么随着n的不同,请问一共会有多少种不同选择的方案导致多少个不同的林克?

输入

允许在方格上行走的步数n(n <= 20)

输出

经过n个选择之后,诞生的不同的林克的个数。

样例

2
7

难度

中,DFS

解法

调用深度优先搜索DFS模板,注意,每搜索完一次要重置当前状态。

代码

#include "bits/stdc++.h"
using namespace std;
#define maxSpacetime 70
int fates[maxSpacetime][maxSpacetime];
long long dfs(int i,int j,int n){
    if(n==0) return 1;
    fates[i][j] = 1;
    long long num = 0;
    if(fates[i][j-1]!=1) num += dfs(i,j-1,n-1);  //向左
    if(fates[i][j+1]!=1) num += dfs(i,j+1,n-1);  //向左
    if(fates[i+1][j]!=1) num += dfs(i+1,j-1,n-1);  //向左
    fates[i][j]=0;  //重置当前状态
    return num;
}
int main() {
    int n;
    cin>>n;
    cout<<dfs(0,35,n);
    return 0;
}

发布了129 篇原创文章 · 获赞 148 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/matafeiyanll/article/details/105238806