美文网首页
善良障碍物

善良障碍物

作者: 何景根 | 来源:发表于2020-11-17 11:04 被阅读0次

题目描述

有一个 N 行 M 列的二维表格,行的编号从上往下是 0 至 N-1,列的编号从左往右是 0 至M-1。每个格子是一个字符,其中‘.’表示可通行格子,‘#’表示障碍物格子。你的目标是从左上角格子(0,0)走到右下角格子(N-1,M-1),每一步可以走到当前格子的上、下、左、右,4 个相邻的格子之一,但是不能走入障碍物格子。但是很遗憾,给你的二维表格保证,一开始你是无法完成目标的。对于某个障碍物格子,假如把该障碍物格子变成可通行格子,就能使得可以从左上角格子顺利走到右下角格子,那么该障碍物格子称为“善良障碍物格子”。你的任务是输出二维表格总共有多少个“善良障碍物格子”

输入格式

e.in
第一行,两个整数 N 和 M。2 <= N,M <= 100。
接下来是 N 行 M 列的二维表格。

输出格式

e.out
一个整数。

输入/输出例子1

输入:

4 6
..##..
..##..
...#..
..##..

输出:
1

代码

#include <iostream>
#include <queue>
using namespace std;
typedef struct{
    int x;
    int y;
}node;
queue<node> q;
int n,m,sum;
char map[105][105];
int vist[105][105];
char buff[105];
void acc(node no,int ox,int oy){
    if(oy>=1&&ox>=1&&ox<=n&&oy<=m){
        if(map[ox][oy]=='#'){
            if(vist[ox][oy]==0){
                vist[ox][oy]=no.x*m+no.y;
            }
            else if(vist[ox][oy]==no.x*m+no.y);
            else{
                sum++;
                vist[ox][oy]=no.x*m+no.y;
            }
        }
        else{
            if( vist[ox][oy]==0){
                vist[ox][oy]=1;
                node newNode={ox,oy};
                q.push(newNode);
            }
        }

    }
    
}
void bfs(node no){
    q.push(no);
    while (!q.empty()) {
        node ncur=q.front();
        q.pop();
        int ox,oy;
        //上
        ox=ncur.x;
        oy= ncur.y-1;
         acc(no,ox,oy);
        
        //下
        ox=ncur.x;
        oy=ncur.y+1;
        acc(no,ox,oy);
        
        //左
        ox=ncur.x-1;
        oy=ncur.y;
        acc(no,ox,oy);
        
        //右
        ox=ncur.x+1;
        oy=ncur.y;
        acc(no,ox,oy);
    }//end while
}
int main(){
    cin>>n>>m;
    for (int i=1;i<=n;i++){
        cin>>buff;
        for (int j=0;j<m;j++)
            map[i][j+1]=buff[j];
    }
    
    
    //求一能到达的#
    node n11={1,1};
    vist[1][1]=1;
    bfs(n11);
    node nmn={n,m};
    vist[n][m]=1;
    bfs(nmn);
    cout<<sum;
    return 0;
}

相关文章

  • 善良障碍物

    题目描述 有一个 N 行 M 列的二维表格,行的编号从上往下是 0 至 N-1,列的编号从左往右是 0 至M-1。...

  • NavMesh Obstacle组件

    NavMesh障碍物组件 在我们游戏中通常在寻路时会遇见一些障碍物(动态,静态障碍物),对于这些障碍物的控制我们使...

  • 【24/30】不要绕开写作障碍物

    读到作家余华的一篇演讲主题为《我叙述中障碍物》。 他说:“伟大的作家永远不会绕开障碍物,甚至给自己制造障碍物。” ...

  • 障碍物

    文/墨尔本.晴上 左腿搭着右腿一起抖 或者右腿搭着左腿一起抖 循环往复 葛优躺 左耳音乐右耳风声 沏一杯花茶 一半...

  • 障碍物

    走路时遇到障碍物都会下意识去避开 即使它不是障碍物也会带来一样的结果 例如这灯影下的栅栏 树枝和墙体如实物般栩栩如...

  • 障碍物

    猫的世界里有很多障碍物,在我们看来,不仅仅是挡住前路的东西被称为障碍物,在视野里所有碍着眼睛的都算是。 小甲显然不...

  • 障碍物

    整个暑假,他们毫不客气的 把我的家当作避暑胜地 衣来,伸手 饭来,还不见得张口 他们学习,聊天,工作,看剧,打游戏...

  • 18080619 小球管理

    0806视频:19 物理弹球 小球管理 - 障碍物扣血 00:03:42——00:22:20 可以理解障碍物可以抗...

  • 暑期公益班/Scratch学习/2.2 跑酷(二)

    视频连接:https://adacode.net/topic/129 障碍物下的移动 障碍物的移动和阿达的移动很像...

  • 18080518 2D游戏 物理弹球

    0805视频 18 物理弹球场景 小球弹射 物理弹球Demo制作 - 需求分析 小球小球.png 障碍物障碍物.p...

网友评论

      本文标题:善良障碍物

      本文链接:https://www.haomeiwen.com/subject/rykxiktx.html