POJ1979(DFS)

【题解】POJ 1979 Red and Black(DFS) POJ 1979 Red and Black 原题 There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four ... 阅读详情

POJ1979(DFS)


Red and Black

Description

There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adjacent tiles. But he can’t move on red tiles, he can move only on black tiles.

Write a program to count the number of black tiles which he can reach by repeating the moves described above.

Input

The input consists of multiple data sets. A data set starts with a line containing two positive integers W and H; W and H are the numbers of tiles in the x- and y- directions, respectively. W and H are not more than 20.

There are H more lines in the data set, each of which includes W characters. Each character represents the color of a tile as follows.

‘.’ - a black tile
‘#’ - a red tile
‘@’ - a man on a black tile(appears exactly once in a data set)
The end of the input is indicated by a line consisting of two zeros.

Output

For each data set, your program should output a line which contains the number of tiles he can reach from the initial tile (including itself).

Sample Input

6 9
....#.
.....#
......
......
......
......
......
#@...#
.#..#.
11 9
.#.........
.#.#######.
.#.#.....#.
.#.#.###.#.
.#.#..@#.#.
.#.#####.#.
.#.......#.
.#########.
...........
11 6
..#..#..#..
..#..#..#..
..#..#..###
..#..#..#@.
..#..#..#..
..#..#..#..
7 7
..#.#..
..#.#..
###.###
...@...
###.###
..#.#..
..#.#..
0 0

Sample Output

45
59
6
13
题意

有一个矩形的房间,里面铺满了方形的瓷砖。每一个瓷砖有红色还有黑色两种,人只能站在黑色的瓷砖上不能站在红色的瓷砖上,每次只能走前后左右四个方向的四个瓷砖,计算能够到达的黑色瓷砖的总面积数。

思路

进行一个简单的dfs,从起始点向四个方向分别进行dfs。

代码
import java.util.Scanner;

public class RedAndBlack {

    int[][] map = new int[25][25];
    int startx;
    int starty;
    int[] xs = {-1, 0, 0, 1};
    int[] ys = {0, -1, 1, 0};
    int count = 0;

    public void dfs(int x, int y) {
        this.count = this.count + 1;
        if (this.map[x][y] == 1) {
            this.map[x][y] = 0;
        }
        for (int i = 0; i < 4; i++) {
            if (this.map[x + xs[i]][y + ys[i]] == 1) {
                dfs(x + xs[i], y + ys[i]);
            }
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            int m = sc.nextInt();
            int n = sc.nextInt();
            if (m == 0 && n == 0) {
                break;
            }
            RedAndBlack rb = new RedAndBlack();

            for (int i = 1; i <= n; i++) {
                String str = sc.next();
                for (int j = 1; j <= m; j++) {
                    if (str.charAt(j - 1) == '.') {
                        rb.map[i][j] = 1;
                    }
                    if (str.charAt(j - 1) == '@') {
                        rb.startx = i;
                        rb.starty = j;
                    }
                }
            }
            rb.dfs(rb.startx, rb.starty);
            System.out.println(rb.count);
        }
        sc.close();
    }
}
poj1979解体报告(挑战程序设计竞赛) 打算边看这本书边做题了,看到最小生成树那里又卡住了,果然底子不够啊。 顺便写下解体报告。 poj1979要求输入2个整数,图的高度和宽度。然后输出可以移动的格子数是多少。 .代表黑格子,#代表红格子,@代表人的位置。 只能在黑格子上移动,首先我们找到人的位置,然后dfs一次,把黑格子替换成红格子。每dfs一次,一个黑格子就变成红格子。直至所有的可以行走的黑格子变成红格子后,结果就出来了。 阅读详情

相关推荐

空地多无人平台协同路径规划复现:从建模到Matlab仿真全解析

路径规划是机器人领域的核心基础技术,从单机避障到多平台协同,问题复杂度显著提升。空地协同规划融合无人机与无人车的异构优势,通过将地图分层建模为空中与地面栅格,并采用A*算法生成初始路径、B样条平滑以及改进遗传算法进行任务分配与时间同步优化,能够有效处理几何约束、运动学约束和避碰约束等。该技术广泛应用于区域巡逻、目标搜索、物资转运等任务场景,也是高校论文复现和工程仿真的常见课题。本文从问题建模、算法设计到Matlab代码结构,系统梳理了一套空地多无人平台协同路径规划的复现思路,同时给出坐标系校准、遗传算法收敛

weixin_32175665的博客 248

c++ DFS练习 红与黑

红与黑是DFS的一题经典练习题,比较简单,尽可能自己打出代码 题目原题如下: There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to ...

hzh2004的博客 1691

金蝶EAS uploadlogo漏洞实战:如何快速检测你的系统是否受影响

本文详细解析了金蝶EAS uploadlogo任意文件上传漏洞的检测与防护方法,帮助企业安全团队快速识别系统风险。通过资产发现、漏洞验证和应急响应方案,有效防范财务数据泄露和系统入侵风险,提升企业整体安全防护能力。

weixin_29322553的博客 386

Red and Black

Red and Black Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 26011 Accepted Submission(s): 15719 Problem Description There is a rectang...

娄零的博客 588

CentOS 7/8 系统下,基于Docker Compose一键部署Dify AI应用平台

本文详细介绍了在CentOS 7/8系统下,使用Docker Compose一键部署Dify AI应用平台的完整流程。从系统环境准备、Docker引擎安装与加速配置,到获取Dify项目、关键环境变量设置,再到服务启动、状态监控及初始化访问,提供了手把手的部署指南和常见问题排查方法,帮助用户快速搭建稳定、可维护的AI应用开发环境。

q5r6s7的博客 139

【BLE系列-第六篇】GATT解析:属性、特征、描述符的逻辑关系

本文系统介绍了BLE协议中的ATT和GATT机制。ATT以"属性"为基本数据单元,包含UUID、Handle、权限和Value四个要素。GATT则在ATT基础上构建了服务、特征和描述符的层次结构:服务(UUID:0x2800/0x2801)通过声明属性标识,特征声明(UUID:0x2803)指向特征值(UUID:0x2Axx或自定义),描述符(UUID:0x2900~0x290F)提供附加信息。GATT复用ATT发现机制,通过定义特定UUID语义实现服务发现和特征管理。这种设计使BLE设

qq_43399763的博客 1929

POJ——1979(深搜)

题目链接:http://poj.org/problem?id=1979 源代码: #include using namespace std; char a[1005][1005]; int X[5]={-1,0,1,0}; int Y[5]={0,-1,0,1};  int m,n; int check(int x,int y) { if(x=m||y>=n)

luoshenzhisi 505

从拆解图看懂空心杯电机:有刷 vs 无刷内部结构全解析(附DIY注意事项)

本文深入解析有刷与无刷空心杯电机的内部结构差异,通过高清拆解图展示关键部件工艺特点,并分享实用的维护技巧和检测方法。重点对比两种电机在效率、寿命和适用场景上的优劣,为DIY爱好者提供详细的注意事项和操作指南。

xgboost6farmer的博客 516

POJ-1979 深度优先搜索DFS

POJ-1979这道题用到的是深度优先搜索(DFS),题目本身很好理解,但是里面有个陷阱啊。。 个人理解: 这道题首先应该在输入时找出(@)所在位置并且从此处开始进行深度优先搜索遍历,在运用DFS时,要注意将已经遍历的点更新为“#”。遍历时从上下左右四个方向进行遍历,直到遇到下一个“.”。具体看代码中的注释。 C++代码: #include #include #defi

MainTain_的博客 674

用 XCO 库一键找出某个 ABAP 类的全部子类

ABAP XCO库子类枚举技术解析 本文介绍了在ABAP项目中如何利用XCO库高效获取类的继承层次结构。传统方法使用CL_ABAP_CLASSDESCR或手动维护映射表存在效率低、易遗漏的问题。新方法通过XCO库的IF_XCO_AO_CLASS接口,可简洁地获取父类的所有子类(包括间接子类)。 核心API链式调用: 获取类句柄:xco_cp_abap=>class() 导航子类集合:subclasses->all 获取结果:get()返回类引用表或get_names()返回类名列表 典型应用场景

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 127

LabVIEW实现TCP通信

在本节中,我们将简要探讨TCP通信的基础知识,并以工业物联网平台TLINK中的云端设备数据发布设计为例,详细阐述在互联网环境下TCP客户端应用程序设计的基本方法。

不脱发的程序猿 1959

POJ 1979 (DFS、BFS入门 、递归回溯 )

DFS(深度优先搜索)和BFS(广度优先搜索)是两种搜索策略,属于基础的常用算法。 DFS顾名思义 先优先搜索深处的,可比喻为 一条路一直往下走,走到不能走的时候,原路返回,返回到有路可走,在继续走,如此循环。 看下图 DFS: 由此图我们可知,DFS一次走一条路,直到无路可走,并且,不走已经走过的路,那么我们如何让计算机知道这条路已经走过呢? 一般用二维数组,将走过的位置标记为 1,...

GD_ONE的博客 729

Qt 【window udp 高频采集丢包问题】

使用Asio + 无锁队列或者环形缓存区方案可以解决 qt udp 在window平台高速采集 (128k)丢包问题。

weixin_45397344的博客 177

POJ - 1979 (dfs)

POJ - 1979 (dfs) 题目正文如下: There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four ad...

weixin_44498746的博客 342

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

PoJ1979 Red and Black (DFS)

题目链接:http://poj.org/problem?id=1979 题意:   有一个由正方形的黑色砖块和红色砖块组成的矩形广场,一个人站在广场上的某处,他可以选择往四周(上下左右)的黑色砖块上走,问他一共可以走多少个砖块(加上他本身站立的砖块).   "."为黑色砖块   "#"为红色砖块   "@"为人的起始位置 思路:   利用DFS 从人的起始位置开始搜索,搜索...

dimaishu7553的博客 121

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Red and Black//POJ - 1979//dfs

Red and Black//POJ - 1979//dfs 题目 There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one ...

salty_fishman的博客 133

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

POj 1979 Red and Black(容易理解的dfs)

#include<stdio.h> #include<stdlib.h> #include<string.h> int map[21][21]; int m = 0, n = 0; int num = 0; int d[4][2] = { {-1,0},{0,-1},{1,0},{0,1} }; void dfs(int x, int y) { int i = 0, j = 0, dx = 0, dy = 0; num++; map[x][y] = '#'; fo

谦卑 435

poj 1979 Red and Black(DFS)

传送门:http://poj.org/problem?id=1979 昨天晚上做了这个题,死活没做对,当时就想这么水的题怎么能错呢?今天一看,这个题输入行和列的顺序和以前做的题正好颠倒了(我一直记得之前都是先输入行,再输入列,这个题先输入的列),恍然大悟 #include char map[21][21]; int sum,n,m; int next[4][2] = {{0,1},{1,0}

梦幻的蔷薇色 378

POJ 1979 DFS

题目链接:http://poj.org/problem?id=1979 #include<cstring> #include<iostream> using namespace std; int n=0,h=0,sum=0; char aa[21][21]; void DFS(int p,int q) { if(aa[p][q]=='.'&a...

weixin_30532759的博客 128

poj1979 Red and Black(dfs判断联通分量)

Red and Black Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 19925   Accepted: 10677 Description There is a rectangular room, covered with square tiles. Each

twobqn123的专栏 884

Red and Black/POJ 1979/DFS

Red and Black/POJ 1979/DFS 题目 There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of fo...

weixin_45600829的博客 146

DFS相关专题练习——POJ 1979, POJ3009, C++ 代码实现

POJ 1979:Red and Black http://poj.org/problem?id=1979 一道简单的DFS入门题,主要需要注意的地方就是输入输出的方式:输入是 scanf 按行读入而非按字符读入;输出需要针对多个输入时给出结果,使用while循环来实现。 #include &amp;lt;iostream&amp;gt; #include &amp;lt;cstdio&amp;gt; using name...

Choly_chen的博客 411

【poj】1979--Red and Black (DFS)

题目链接:点击查看 第一次写DFS的文章,也是才开始做DFS的题,这道题花了我不少时间,第一遍是根据做的上一个DFS题poj的1088题的标答改出来的,因此有一些不必要的操作。然后,晚上想了想DFS的实现过程,用程序跑了一遍,发现跟我想的实现过程差不多。主要就是递归和遍历(可能吧)。删去了不必要的计步数组只用visit。另外还学到了如何简便的实现方向移动。 另外POJ好像不资瓷bits/std...

Dicer_的博客 330

Red and Black POJ - 1979(dfs)

Red and Black POJ - 1979 There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four ad...

rainbowsea_1的博客 137

POJ1979——Red and Black红与黑(dfs)——我的第一篇优快云博客*^-^*

POJ1979—http://poj.org/problem?id=1979 题目描述 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 输入 包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个...

SuaSUA_He的博客 624
上一篇: POJ1753(DFS)
下一篇: POJ2386(DFS)
shui2104
博客等级 码龄10年 22粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值