当前位置: 首页 > news >正文

红与黑,,

有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。

你站在其中一块黑色的瓷砖上,只能向相邻(上下左右四个方向)的黑色瓷砖移动。

请写一个程序,计算你总共能够到达多少块黑色的瓷砖。

输入格式

输入包括多个数据集合。

每个数据集合的第一行是两个整数 WW 和 HH,分别表示 xx 方向和 yy 方向瓷砖的数量。

在接下来的 HH 行中,每行包括 WW 个字符。每个字符表示一块瓷砖的颜色,规则如下

1)‘.’:黑色的瓷砖;
2)‘#’:红色的瓷砖;
3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。

当在一行中读入的是两个零时,表示输入结束。

输出格式

对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。

数据范围

1≤W,H≤201≤W,H≤20

输入样例:
6 9 
....#. 
.....# 
...... 
...... 
...... 
...... 
...... 
#@...# 
.#..#. 
0 0
输出样例:

45
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;const int N = 25;int n, m;
char g[N][N];
bool st[N][N];int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};int dfs(int x, int y)
{int cnt = 1;st[x][y] = true;for (int i = 0; i < 4; i ++ ){int a = x + dx[i], b = y + dy[i];if (a < 0 || a >= n || b < 0 || b >= m) continue;if (g[a][b] != '.') continue;if (st[a][b]) continue;cnt += dfs(a, b);}return cnt;
}int main()
{while (cin >> m >> n, n || m){for (int i = 0; i < n; i ++ ) cin >> g[i];int x, y;for (int i = 0; i < n; i ++ )for (int j = 0; j < m; j ++ )if (g[i][j] == '@'){x = i;y = j;}memset(st, 0, sizeof st);cout << dfs(x, y) << endl;}return 0;
}
#include<iostream>
#include<cstring>using namespace std;const int N=30;char g[N][N];
int n,m,cnt;
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};void dfs(int x,int y)
{g[x][y]='#';cnt++;for(int i=0;i<4;i++){int a=x+dx[i],b=y+dy[i];if(a<0 || a>=n || b<0 || b>=m || g[a][b]=='#') continue;dfs(a,b);}
}int main()
{while(cin>>m>>n,n||m){cnt=0;for(int i=0;i<n;i++) scanf("%s",g[i]);int x,y,flag=0;for(int i=0;i<n;i++){for(int j=0;j<m;j++)if(g[i][j]=='@'){x=i,y=j;flag=1;}if(flag) break;}dfs(x,y);cout<< cnt <<endl;}return 0;
}
#include<bits/stdc++.h>
using namespace std;
int c=1,n,m;
char a[21][21];
void dfs(int i,int j)
{if(a[i][j]=='#'||i<1||j<1||i>n||j>m)return;if(a[i][j]=='.')c++;a[i][j]='#';dfs(i+1,j);dfs(i-1,j);dfs(i,j+1);dfs(i,j-1);
}
int main()
{while(cin>>m>>n){c=1;if(n==0&&m==0)break;int p=0,q=0;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){cin>>a[i][j];if(a[i][j]=='@')p=i,q=j;}dfs(p,q);cout<<c<<'\n';}
}
bfs
#include<iostream>
#include<cstring>
#include<queue>
#define x first
#define y secondusing namespace std;
typedef pair<int,int> PII;const int N=30;char g[N][N];
int n,m;
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
bool st[N][N];int bfs(int x,int y)
{int cnt=1;queue<PII> q;q.push({x,y});while(q.size()){PII t=q.front();q.pop();int x=t.x,y=t.y;for(int i=0;i<4;i++){int a=x+dx[i],b=y+dy[i];if(a<0 || a>=n || b<0 || b>=m) continue;if(st[a][b]) continue;if(g[a][b]!='.') continue;st[a][b]=true;q.push({a,b});cnt++;}}return cnt;
}int main()
{while(cin>>m>>n,n||m){memset(st,0,sizeof st);for(int i=0;i<n;i++) scanf("%s",g[i]);int x,y,flag=0;for(int i=0;i<n;i++){for(int j=0;j<m;j++)if(g[i][j]=='@'){x=i,y=j;flag=1;}if(flag) break;}cout<< bfs(x,y) <<endl;}return 0;
}

http://www.lryc.cn/news/503784.html

相关文章:

  • 嵌入式驱动开发详解16(音频驱动开发)
  • 【嵌入式软件】跑开发板的前置服务配置
  • 如何高效实现进程间通信
  • scala基础学习_变量
  • Java 身份证校验工具类(15位校验、18位校验与15转18)
  • HTML+CSS+Vue3的静态网页,免费开源,可当作作业使用
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(8)
  • HCIA-Access V2.5_2_2_2网络通信基础_IP编址与路由
  • 音频客观测评方法PESQ
  • 前后端分离的项目使用nginx 解决 Invalid CORS request
  • 回归预测 | MATLAB实现SVM-Adaboost集成学习结合支持向量机多输入单输出回归预测
  • 常见排序算法总结 (五) - 堆排序与堆操作
  • kubernetes的三种探针ReadinessProbe、LivenessProbe和StartupProbe,以及使用示例
  • 掌握线性回归:从简单模型到多项式模型的综合指南
  • Java:183 基于SSM的高校食堂系统
  • 光谱相机
  • AI绘图:开源Stable Diffusion 3 ComfyUI下载安装方法
  • 一区向量加权算法优化INFO-CNN-SVM卷积神经网络结合支持向量机多特征分类预测
  • AES笔记整理
  • Jmeter 性能压测-Tomcat连接数
  • 基于Vue3的组件封装技巧分享
  • python中r代表什么意思
  • 《量子计算对人工智能发展的深远影响》
  • 12.2【JAVA EXP4]next.js的各种问题,DEBUG,前端补强,前后端交互,springSecurity ,java 配置,h2数据库
  • docker启动一个helloworld(公司内网服务器)
  • 使用 Netty 实现 RPC 通信框架
  • 【机器学习06--贝叶斯分类器】
  • 创建vue3项目步骤以及安装第三方插件步骤【保姆级教程】
  • [146 LRU缓存](https://leetcode.cn/problems/lru-cache/)
  • 【Java Nio Netty】基于TCP的简单Netty自定义协议实现(万字,全篇例子)