问题标题: 酷町堂:4508

0
0

0
已采纳
被禁言 李秉轩
李秉轩
修练者
修练者
#include <bits/stdc++.h>
using namespace std;
long long f[25][25],d[25][25];
/*
状态f[i][j]从A点到达(i,j)的路径
状态转移方程f[i][j]=f[i-1][j]+f[i][j-1]
边界f[0][0]=1;
目标从A点到达B点的路径
*/
void aa(int x,int y){   
    int i,j,k;
    if(x<0||x>20||y<0||y>20){ 
        return;
    } 
    else d[x][y]=1;
}
int main(){
   int n,m,x,y;
   int i,j;
   cin>>n>>m>>x>>y;
    aa(x-1,y);
    aa(x+1,y);
    aa(x,y+1);
    aa(x,y-1);
    f[0][0]=1;
    for(i=0;i<=n;i++)
        for(j=0;j<=m;j++){
            if(d[i][j]==0&&i>0&&j>0){
                f[i][j]=f[i-1][j]+f[i][j-1];  
            }else if(d[i][j]==1){
                f[i][j]=0;
            }else if(i>0&&d[i][0]==0){ 
                f[i][0]=f[i-1][0];      
            }else if(j>0&&d[0][j]==0){
                f[0][j]=f[0][j-1];
            } 
        }
        cout<<f[n][m]<<endl;
    return 0;
}

 

我要回答