锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

牛客 四面楚歌

时间:2022-11-03 21:30:00 mn35光电传感器对射型

链接:四面楚歌
来源:牛客网

题目描述

在游戏中,由于一个错误的决定,你的士兵被敌人包围和镇压。为了挽回人员损失,你必须打开金手指暂停敌人士兵的移动,以便试图让你的士兵成功突破。

已知地图是一块 n × m n \times m n×m每个格子有以下几种类型:

.:这意味着这地。

1:这意味着这里有敌方士兵,不允许通过。敌方士兵不会移动,因为他们打开了金手指。

0:说这里有我们的士兵。

现在规定我们的士兵只能从上/下/左/右四个方向移动。只要一个士兵移出地图边界,即使士兵成功突破。有多少士兵能成功突破?

输入描述:

第一行有两个正整数 n , m , n ≤ 1000 , m ≤ 1000 n,m,n \leq 1000,m \leq 1000 n,m,n1000,m1000。接下来 n n n行,每行 m m m表示地图情况的个字符。

输出描述:

成功输出突破的士兵数量。

输入

4 5 111.. 101.. 111.. ..0.. 

输出

1 

题解

#include  using namespace std; char mg[1010][1010]; int dx[4] = { 
        -1, 0, 1, 0}, dy[
       
        4
        ] 
        = 
        { 
         
        0
        , 
        1
        , 
        0
        , 
        -
        1
        }
        ; 
        int n
        , m
        , ans
        , xi
        , yi
        ; 
        void 
        dfs
        (
        int x
        , 
        int y
        ) 
        { 
          
        for 
        (
        int i 
        = 
        0
        ; i 
        <= 
        3
        ; i
        ++
        ) 
        { 
          
        //顺时针遍历四周 xi 
        = x 
        + dx
        [i
        ]
        , yi 
        = y 
        + dy
        [i
        ]
        ; 
        if 
        (xi 
        >= 
        0 
        && xi 
        <= n 
        + 
        1 
        && yi 
        >= 
        0 
        && yi 
        <= m 
        + 
        1 
        && mg
        [xi
        ]
        [yi
        ] 
        != 
        '1'
        ) 
        { 
          
        //迷宫范围内&没敌人 
        if 
        (mg
        [xi
        ]
        [yi
        ] 
        == 
        '0'
        ) ans
        ++
        ; mg
        [xi
        ]
        [yi
        ] 
        = 
        '1'
        ; 
        // flag 
        dfs
        (xi
        , yi
        )
        ; 
        } 
        } 
        } 
        int 
        main
        (
        ) 
        { 
          cin 
        >> n 
        >> m
        ; 
        // n*m的迷宫 1~n 1~m 
        for 
        (
        int i 
        = 
        1
        ; i 
        <= n
        ; i
        ++
        ) 
        { 
          
        for 
        (
        int j 
        = 
        1
        ; j 
        <= m
        ; j
        ++
        ) 
        { 
          cin 
        >> mg
        [i
        ]
        [j
        ]
        ; 
        } 
        } 
        dfs
        (
        0
        , 
        0
        )
        ; 
        //从墙开始 cout 
        << ans 
        << endl
        ; 
        return 
        0
        ; 
        } 
       
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章