3 条题解
-
1
这道题,非常困难,写不出来👍
#include <iostream> #include <cstring> using namespace std; char mp[21][21]; int n,m,x,y,ans = 1,vis[21][21];//vis数组记录,以防重复搜索 int dx[4] = {0,1,0,-1},dy[4] = {1,0,-1,0}; //四个方向 bool check(int a,int b) { if(a > 0 && a <= m && b > 0 && b <= n) return true; return false; } //判断是否越界 void dfs(int a,int b) { for(int i = 0;i < 4;i ++)//向四个方向进攻! { int xx = a + dx[i],yy = b + dy[i]; if(check(xx,yy) && vis[xx][yy] == 0 && mp[xx][yy] == '.') { ans ++; vis[xx][yy] = 1; dfs(xx,yy); } } } int main() { ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); //无法编译 cin >> n >> m; do { ans = 1; memset(vis,0,sizeof(vis)); memset(mp,0,sizeof(mp)); for(int i = 1;i <= m;i ++) { for(int j = 1;j <= n;j ++) { cin >> mp[i][j]; if(mp[i][j] == '@') { vis[i][j] = 1; x = i,y = j; } //记录起点 } } dfs(x,y); cout << ans << "\n"; cin >> n >> m; }while(n && m); }
信息
- ID
- 216
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 62
- 已通过
- 10
- 上传者