Rockiswu 2021-08-22 15:52 采纳率: 87.9%
浏览 34
已结题

求帮纠错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

  • 写回答

1条回答 默认 最新

  • 诺er~ 2021-08-22 16:02
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月30日
  • 已采纳回答 8月22日
  • 修改了问题 8月22日
  • 创建了问题 8月22日