题目大致是,从一个二维数组的左下角,到右上角有多少种路径,只能往上,往右,斜向上三种方法,1表示通的,0表示有障碍物
例如 输入:
3 3
1 1 1
1 0 1
1 1 1
输出
4
#include<iostream>
using namespace std;
int m,n,p,q,count = 0;
int a[20][20],book[20][20];
void findNext(int x,int y){
int next[3][2] = {(0,1),(-1,1),(-1,0)};
int tx,ty;
if(x==p && y==q) {
count++;
return;
}
for(int k=0;k<3;++k){
tx = x+next[k][0];
ty = y+next[k][1];
if(tx<0||tx>m-1||ty<0||ty>n-1)continue;
if(a[tx][ty]==1 && book[tx][ty]==0){
book[tx][ty]=1;
findNext(tx,ty);
book[tx][ty]=0;
}
}
return;
}
int main(){
cin>>m>>n;
int startx = m-1,starty =0;
p=0;q=n-1;
for(int i=0;i<m;++i){
for(int j=0;j<n;++j){
cin>>a[i][j];
}
}
book[startx][starty]=1;
findNext(startx,starty);
cout<<count;
system("pause");
return 0;
}