NC223206. 四面楚歌
描述
在游戏中,因为一次错误的决断,你的士兵被敌方实行围剿。为了挽回人员损失,你不得不开启金手指暂停敌方士兵的移动,从而尽量让自己的士兵能成功突围。
已知地图是一块的区域,每块格子有以下几种类型:
.:表示此处为一块空地。
1:表示此处有敌方士兵,不许通过。因为开启了金手指,所以敌方士兵不会移动。
0:表示此处有我方士兵。
现规定我方士兵只能进行上/下/左/右四个方向的移动,只要某个士兵移动出了地图边界,那么就算该士兵突围成功。请问能有多少士兵成功突围。
输入描述
第一行两个正整数,,,。
接下来行,每行个字符,表示地图情况。
输出描述
输出成功突围的士兵个数。
示例1
输入:
4 5 111.. 101.. 111.. ..0..
输出:
1
C++ 解法, 执行用时: 93ms, 内存消耗: 68112K, 提交时间: 2021-08-03 21:10:01
#include<bits/stdc++.h> using namespace std; char ch[1003][1003]; int vis[1003][1003]; int sum=0; int n,m; void dfs(int x,int y) { if(x<0||x>n+1||y<0||y>m+1||vis[x][y]||ch[x][y]=='1') return; vis[x][y]=1; if(ch[x][y]=='0') sum++; dfs(x+1,y); dfs(x,y+1); dfs(x-1,y); dfs(x,y-1); return; } int main() { cin>>n>>m; for(int i=1;i<=n;i++) { cin>>ch[i]+1; } dfs(0,0); cout<<sum; return 0; }