求帮纠错c++上学路线

img

img

img


#include<bits/stdc++.h>
using namespace std;
int f[20][20];
bool v[20][20];
int main(){
    int a,b,n;
    cin>>a>>b>>n;
    int x,y;
    for(int i=0;i<n;i++){
        cin>>x>>y;
        f[y][x]=0;
        v[y][x]=1;
    }
    for(int i=b;i>0;i--){
        for(int j=1;j<=a;j++){
             if(i==1||j==1){
                f[i][j]=1;
                continue;
            }
            if(v[i][j]){
                continue;
            }else{
                f[i][j]=f[i][j-1]+f[i+1][j];
            }
        }
    }
    for(int i=b;i>0;i--){
        for(int j=1;j<=a;j++){
            cout<<f[i][j]<<" ";
        }
        cout<<endl;
    }
    //cout<<f[a][b]<<endl;
    return 0;
}

img

思路有点问题,可以用 bfs 来做这道题。先从(1,1)开始,把(1,1)入队,依次去扩展右、下的节点,如果右、下越界了,或者是设有障碍物,那么也就是说这个点不能扩展,如果当前所扩展完的点合法,那么让它入队,如果扩展点为(a,b)那么 ans++;
当然,动规也是可以的,就是注意状态转移