1. 程式人生 > >百練 4103 踩方格(深搜)

百練 4103 踩方格(深搜)

描述

有一個方格矩陣,矩陣邊界在無窮遠處。我們做如下假設:
a.    每走一步時,只能從當前方格移動一格,走到某個相鄰的方格上;
b.    走過的格子立即塌陷無法再走第二次;
c.    只能向北、東、西三個方向走;
請問:如果允許在方格矩陣上走n步,共有多少種不同的方案。2種走法只要有一步不一樣,即被認為是不同的方案。

輸入

允許在方格上行走的步數n(n <= 20)

輸出

計算出的方案數量

樣例輸入

2

樣例輸出

7

思路:遞迴

(i,j)出發,走n步的方案數,等於以下三項之和:

(i+1,j)出發,走n-1步的方案數。前提:(i+1,j)還沒走過

(i,j+1)出發,走n-1步的方案數。前提:(i,j+1)還沒走過

(i,j-1)出發,走n-1步的方案數。前提:(i,j-1)還沒走過

程式碼如下:

#include<iostream>
#include<cstring>
using namespace std;
int n,visit[30][50];
int way(int i,int j,int n)
{
    if(n == 0)
        return 1;
    visit[i][j] = 1;
    int num = 0;
    if(!visit[i][j - 1])
        num += way(i,j - 1,n -1);
    if(!visit[i][j + 1])
        num += way(i,j + 1,n -1);
    if(!visit[i + 1][j])
        num += way(i + 1,j,n - 1);
    visit[i][j] = 0;
    return num;
}
int main()
{
    cin >> n;
    memset(visit,0,sizeof(visit));
    cout << way(0,25,n) << endl;//從0 ~ 50的中間也就是25開始
    return 0;
}