踩方格

來源:互聯網
上載者:User
踩方格

問題描述

有一個方格矩陣,矩陣邊界在無窮遠處。我們做如下假設:

a.每走一步時,只能從當前方格移動一格,走到某個相鄰的方格上;
c. 只能向北、東、西三個方向走;

請問:如果允許在方格矩陣上走n步(n<=20),共有多少種不同的方案。2種走法只要有一步不一樣,即被認為是不同的方案。

思路:
遞迴

從 (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 <algorithm>#include <cstring>using namespace std;int visited[30][50];int ways(int i, int j, int n){    if(n==0)        return 1;    visited[i][j] = 1;    int num =0;    if( !visited[i+1][j] ) num += ways(i+1, j, n-1);//注意題設只能是北東西,所以此處為+1    if( !visited[i][j-1] ) num += ways(i, j-1, n-1);    if( !visited[i][j+1] ) num += ways(i, j+1, n-1);    visited[i][j] = 0;    return num;}int main(){    int n;    cin >> n;    memset(visited, 0, sizeof(visited));    cout << ways(0, 25, n) <<endl;    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.