百練 4103 踩方格(深搜)
阿新 • • 發佈:2018-12-02
描述
有一個方格矩陣,矩陣邊界在無窮遠處。我們做如下假設:
a. 每走一步時,只能從當前方格移動一格,走到某個相鄰的方格上;
b. 走過的格子立即塌陷無法再走第二次;
c. 只能向北、東、西三個方向走;
請問:如果允許在方格矩陣上走n步,共有多少種不同的方案。2種走法只要有一步不一樣,即被認為是不同的方案。
輸入
允許在方格上行走的步數n(n <= 20)
輸出
計算出的方案數量
樣例輸入
2
樣例輸出
7
思路:遞迴
從出發,走n步的方案數,等於以下三項之和:
從出發,走步的方案數。前提:還沒走過
從出發,走步的方案數。前提:還沒走過
從出發,走步的方案數。前提:還沒走過
程式碼如下:
#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; }