【ZOJ】zoj 1047 (bfs)

Verilog--CDC跨时钟域处理(快时钟域到慢时钟域) Verilog--CDC跨时钟域处理(快时钟域到慢时钟域)CDC问题单比特信号的跨时钟域问题从快时钟域到慢时钟域从慢时钟域到快时钟域多比特信号的跨时钟域问题异步FIFO握手协议 今天先写单比特信号从快时钟域到慢时钟域的方法,后续继续填坑 CDC问题 单比特信号的跨时钟域问题 从快时钟域到慢时钟域 设计思想   从慢时钟域到快时钟域通常使用打两拍的方法,这也适用于从快时钟域到慢时钟域时,但是如果当单比特信号持续时间小于快时钟域的一个周期时,需要用展宽信号再打两拍的方法。 设计相关代码 module Sync_ 阅读详情
</pre><pre name="code" class="cpp"><pre name="code" class="cpp"><div class="hiddable" id="vj_description" style="font-family: 'times new roman'; font-size: 17px; color: rgb(51, 51, 51);"><p class="pst" style="font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; margin-bottom: 0px;">Description</p><div class="textBG" style="border-top-left-radius: 10px; border-top-right-radius: 10px; border-bottom-right-radius: 10px; border-bottom-left-radius: 10px; padding: 10px; border-style: dotted; border-width: 2px; background-color: rgb(234, 235, 255);"><div class="ptx" lang="en-US" style="font-family: 'Times New Roman', Times, serif; font-size: 12pt;">Technicians in a pathology lab analyze digitized images of slides. Objects on a slide are selected for analysis by a mouse click on the object. The perimeter of the boundary of an object is one useful measure. Your task is to determine this perimeter for selected objects. 

The digitized slides will be represented by a rectangular grid of periods, '.', indicating empty space, and the capital letter 'X', indicating part of an object. Simple examples are 
<pre style="white-space: pre-wrap; word-wrap: break-word;">XX   Grid 1       .XXX   Grid 2 
XX                .XXX 
                  .XXX 
                  ...X 
                  ..X. 

 X... 


An X in a grid square indicates that the entire grid square, including its boundaries, lies in some object. The X in the center of the grid below is adjacent to the X in any of the 8 positions around it. The grid squares for any two adjacent X's overlap on an edge or corner, so they are connected. 

 

XXX 
XXX    Central X and adjacent X's 
XXX 


An object consists of the grid squares of all X's that can be linked to one another through a sequence of adjacent X's. In Grid 1, the whole grid is filled by one object. In Grid 2 there are two objects. One object contains only the lower left grid square. The remaining X's belong to the other object. 

The technician will always click on an X, selecting the object containing that X. The coordinates of the click are recorded. Rows and columns are numbered starting from 1 in the upper left hand corner. The technician could select the object in Grid 1 by clicking on row 2 and column 2. The larger object in Grid 2 could be selected by clicking on row 2, column 3. The click could not be on row 4, column 3. 

 

 


One useful statistic is the perimeter of the object. Assume each X corresponds to a square one unit on each side. Hence the object in Grid 1 has perimeter 8 (2 on each of four sides). The perimeter for the larger object in Grid 2 is illustrated in the figure at the left. The length is 18. 

Objects will not contain any totally enclosed holes, so the leftmost grid patterns shown below could NOT appear. The variations on the right could appear: 

 

Impossible   Possible 

XXXX         XXXX   XXXX   XXXX 
X..X         XXXX   X...   X... 

XX.X         XXXX   XX.X   XX.X 
XXXX         XXXX   XXXX   XX.X 

.....        .....  .....  ..... 

..X..        ..X..  ..X..  ..X.. 

.X.X.        .XXX.  .X...  ..... 

..X..        ..X..  ..X..  ..X.. 

.....        .....  .....  ..... 

 

Input

The input will contain one or more grids. Each grid is preceded by a line containing the number of rows and columns in the grid and the row and column of the mouse click. All numbers are in the range 1-20. The rows of the grid follow, starting on the next line, consisting of '.' and 'X' characters. 

The end of the input is indicated by a line containing four zeros. The numbers on any one line are separated by blanks. The grid rows contain no blanks. 

Output

For each grid in the input, the output contains a single line with the perimeter of the specified object.

Sample Input

2 2 2 2
XX
XX
6 4 2 3
.XXX
.XXX
.XXX
...X
..X.
X...
5 6 1 3
.XXXX.
X....X
..XX.X
.X...X
..XXX.
7 7 2 6
XXXXXXX
XX...XX
X..X..X
X..X...
X..X..X
X.....X
XXXXXXX
7 7 4 4
XXXXXXX
XX...XX
X..X..X
X..X...
X..X..X
X.....X
XXXXXXX
0 0 0 0

Sample Output

8
18
40
48
8

 
</pre><pre name="code" class="cpp">题目的意思:先输入行数 row 和列数 col,然后输入搜索起点的坐标,下面输入<span style="font-family: Arial, Helvetica, sans-serif;">一个由“X”和“.”组成的行数为row,列数为col矩形,求解以搜索起点和它的八个方向连接的“X”,组成的图形的周长。</span>
这个题目是一个宽度优先搜索,通过宽度优先搜索可以搜到联通区域,计算周长可以通过他是否是边界,或者是否周围有‘.’,然后让计数的变量自增。
代码:
<pre name="code" class="cpp">#include <iostream>
#include<algorithm>
#include<cstdio>
#include<stdio.h>
#include<queue>
#include<cstring>
#include<string>
using namespace std;
int isvisit[500][500];
queue<int> where;
int row,col,firstx,firsty,counts;
char pathology[250][250];
int main()
{
     //freopen("input.txt","r",stdin);//调试时可以通过这个函数减少手动输入;
     while ( cin >> row >> col >> firsty >> firstx )
     {
      	if ( row == 0 || col == 0 || firsty == 0 || firstx == 0 ) break;
      	for ( int i = 1; i <= row; i++)
        {
             for ( int j = 1; j <= col; j++)  cin >> pathology[i][j];
        }
        counts = 0;
        memset( isvisit, 0, sizeof( isvisit ) );//初始化数组
        where.push( ( firsty - 1 ) * col + firstx - 1 );//把初始点加入队列中
       	isvisit[ firsty ][ firstx ] = 1;
        while ( !where.empty() )
        {
            int number = where.front();
            where.pop();//取出第一个元素
            int y = number / col + 1;
            int x = number % col + 1;
            if ( x == 1 ) counts++;
            if ( x == col ) counts++;//特别注意这里不能讲x==1 和 x == col用或连起来!如果行数是一的话要加两次,把两个条件连起来的话只是加了一次话wa;
            if ( y == 1 ) counts++;
            if ( y == row ) counts++;
            if ( x + 1 <= col && pathology[ y ][ x + 1 ] == '.') counts++;
            if ( x - 1 > 0 && pathology[ y ][ x - 1 ] == '.')  counts++;
            if ( y + 1 <= row && pathology[ y + 1 ][ x ] == '.') counts++;
            if ( y - 1 > 0 && pathology[ y - 1 ][ x ] == '.')  counts++;
            for ( int i = -1; i <= 1; i++ )
            {
                for ( int j = -1; j <= 1; j++ )
                {
                    int dx = x + i;
                    int dy = y + j;
                    if ( dx > 0 && dx <= col && dy > 0 && dy <= row && isvisit[ dy ][ dx ] == 0 && pathology[ dy ][ dx ] == 'X' )
                    {
                        where.push( ( dy - 1 ) * col + dx - 1 );
                        isvisit[ dy ][ dx ] = 1;
                    }
                }
            }
        }
        cout << counts << endl;
        while( !where.empty()) where.pop();
    }
}

 

 


 

 

 


 
CanMV K230实战:用MicroPython玩转AI视觉识别(附完整代码) 本文详细介绍了如何使用MicroPython在CanMV K230开发板上实现AI视觉识别,包括环境搭建、摄像头配置、模型部署及优化技巧。通过实战案例(如智能门禁和工业分拣机器人),展示如何快速开发低门槛的嵌入式AI应用,特别适合初学者和嵌入式开发者。 阅读详情

相关推荐

CentOS7下Node.js v20+安装与常见依赖库问题解决指南

本文详细介绍了在CentOS7系统下安装Node.js v20+的完整流程及常见依赖库问题的解决方案。通过升级glibc到2.28+、配置环境变量以及处理libstdc++版本问题,帮助开发者顺利在老旧系统上部署最新版Node.js,提升开发效率。

weixin_30689307的博客 156

ZOJ题目分类

ZOJ题目分类 初学者题: 1001 1037 1048 1049 1051 1067 1115 1151 1201 1205 1216 1240 1241 1242 1251 1292 1331 1334 1337 1338 1350 1365 1382 1383 1394 1402 1405 1414 1494 1514 1622 1715 1730 1755 1760 1763

狂奔的蜗牛 8566

量子通信:初识量子城域网

对量子城域网的概念、作用、拓扑、建设内容等进行了较为全面的初步介绍。

量子领域相关话题 3344

C++开发环境、库.......ZZ

 1,前言  无数次听到“我要开始学习C++!”的呐喊,无数次听到“C++太复杂了,我真的学不会”的无奈。Stan Lippman先生曾在《C++ Primer》一书中指出“C++是最为难学的高级程序设计语言之一”,人们常将“之一”去掉以表达自己对C++的敬畏。诚然,C++程序设计语言对于学习者的确有很多难以逾越的鸿沟,体系结构的庞大,应接不暇并不断扩充的特性……除此之外,参考资料之多与冗杂使

1601

glibc手动升级高版本导致系统(RedHat/Centos)异常(无法开机等)的解决方法(回退低版本glibc)

我的系统是Redhat7.6, 理论上Redhat7/Centos7都可以使用该方法解决问题。 首先慎重提醒各位:glibc升级会产生无法预料的后果!由于Android NDK需要高版本的glibc才可以使用,所以作死手动去更新了glibc2.18,使得重启系统后图形界面消失。(Redhat/Centos升级此类安装包最好用yum升级,因为系统内的程序对他们的依赖很大,升级会导致大部分程序无法使用...

weixin_42881528的博客 9695

STM32版CCD线性摄像头寻线寻迹小车_stm32接ccd

目前大多数的小车寻线寻迹都是用红外对管寻线,这是比较简单也比较成熟的技术方案,且成本也低。本文将介绍使用CCD线性摄像头寻线寻迹。TSL1401 线性传感器由一个 1x128 的光电二极管阵列、相关的电荷放大电路以及一个内部像素数据保功能组成。内部像素数据保功能可以为所有像素点提供同时积分的开始和停止时间。该阵列由 128 个像素组成,每个像素的感光面积为 3,524.3 平方微米。像素之间的间隔为 8μm。内部控制逻辑简化了操作,该模块需要串行输入(SI)信号和时钟信号(CLK)。

2401_87557129的博客 3228

linux配置ngnix

1、wget https://nginx.org/download/nginx-1.14.2.tar.gz 2、解压 3、 安装依赖 yum install -y gcc-gcc++ pcre pcre-devel zlib zlib-devel openssl openssl-devel 4、本人安装在usr/local/ngnix 5、 6、安装成功后,进入目录 7启动ngnix ...

u011145582的博客 2485

SOEM主站开发篇(1):移植SOEM主站到Linux开发板

详细介绍了SOEM主站源码移植到Linux开发板上的步骤,同时演示了如何使用Linux开发板获取EtherCAT从站的PDO映射信息。

kevin1499的博客 2395

Nearest Opposite Parity CodeForces - 1272E bfs

一、内容 You are given an array a consisting of n integers. In one move, you can jump from the position i to the position i−ai (if 1≤i−ai) or to the position i+ai (if i+ai≤n).For each position i from 1 to...

Tizzi的博客 2万+

一个超酷的开源uHand2.0机械手掌项目

uHand2.0是深圳乐幻索尔公司开源的一款机械手掌,它长下面这个样子:1、uHand2.0外观图之前在公众号就分享过视频:学习嵌入式可以带娃,不信你们看2、uHand2.0硬件原理图看...

Bruce.yang的嵌入式之旅 4457

Python爬虫实战:利用最新技术爬取微信公众号文章(基于搜狗搜索)

使用最新Python版本确保兼容性和性能:比传统Requests更强大的HTML解析库Playwright:新一代浏览器自动化工具,比Selenium更高效Asyncio:异步IO框架提升爬虫效率Redis:分布式任务队列和去重MongoDB:非关系型数据库存储结构化数据本文详细介绍了如何利用Python最新技术栈构建一个功能强大的微信公众号文章爬虫。通过结合Playwright浏览器自动化、异步IO、分布式任务队列等技术,我们实现了一个能够绕过反爬机制、高效稳定抓取数据的解决方案。

2201_76125261的博客 1794

Numpy Tutorial while I'm learning OpenCV-Python

I realized that I had to learn some basic knowledge of NumPy while I’m learning OpenCV-Python tutorials on the website ’ pythonprogramming.net ’ because I got confused on some parts of the author’s co...

blog 2343

COMSOL介电弹性体数值仿真指南:预拉伸圆形DEA的稳态变形分析(II)

本期博客是《COMSOL介电弹性体数值仿真指南》系列博客中的一期。聚焦于介电弹性体驱动器(DEA)中最为经典的预拉伸圆形DEA驱动器构型,对其在COMSOL平台中的具体建模步骤进行介绍与讨论。

忘了面孔的Batou 353

ZOJ 1047 Image Perimeters (BFS)

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1047 1.BFS求出所有在同一个object中的X 2.计算周长时分析X的每一条边,例如是否是边界、是否和旁边某一个X相交 #include

老和山之子 435

温度PID控制PLC程序

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

SAP B1中文培訓教材_SDK

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

ZOJ 1047 Image Perimeters(BFS搜索)

题目比较长,题目中给你解释了一个样例。 我大概说一下题目的意思,题目给你一个地图,包含字符X和.。 给你一个起点,让你从8个方向去搜索,找X连通块的周长。 如果还没太理解,可以看下题目中图二的例子,题目给定的起点就是2,3; 从这个起点出发,往8个方向扩展以后得到的连通块就是图中圈出来的部分。 这一部分的周长数一数,可以数出来是18。 这一道题目的数据范围比较小,行和列只有20

Yuki_fx的博客 355

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ZOJ-1047

求连通块周长,先BFS求连能块,注意斜向连通的也算,然后遍历每个格子看有几个

xhldtc的专栏 452

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ZOJ 1047 Image Perimeters

大意:给出一张有“.”和“X”组成的图,给出点击位置s,t。求由s,t以及附近不包含”.”的由”X”组成的联通图的周长。 做法:很容易发现,当一个“X”上下左右四个位置没有“X”的时候就会有边,因此,我们BFS搜索由S,T出发能到达的所有是“X”的点,每个“X”的上下左右四个位置有几个“.”就有几条边。搜索完即可。#include <iostream> #include <cstring> #in

youthinkwhat 300

ZOJ-1047 image primeters

此题BFS。 贴代码的插件有问题,所以这次用CODE PASTE http://code.bulix.org/mvapo9-80531

Mr. WA's Blog 431

poj 1111||zoj 1047 Image Perimeters(dfs)

题意: 确实很难看懂>_ 一个'X'每个面对应一个点。 分析: 题目看得我吐血,而且浙大的图太坑爹了,最近做的几题都这样,造成视觉上的误差。题中的数据全都小于25,果断dfs虽然没仔细去研究过但100以内的数用dfs总是没错的。 哈哈,除了一个地方因为行列搞错了,基本上是一次写成1A。下个星期就开始做bfs吧。 #include char a[15][15]; int dir

uiiの技术随笔 931

深度优先搜索-ZOJ 1047 Image Perimeters

大致题意给你一张图,图上有‘X’和‘.’。‘X’可以八个方向连通,这些连起来的‘X’成为一个块。问:输入一个坐标,这个坐标所在的块的周长是多少。 如图: 分析1、使用上下左右和对角线方向的深度优先搜索。 2、尝试几组数据,不难发现,在块中的’X’。’X’靠近边界,或者’X’的周围是’.’,那么周长就会+1。 如此,其实我们也可以简化问题,只需要在输入的数据上下左右都加上一行(列)’.’。这样

许佳佳的博客 1983

OJ题解汇总

。。。

nameofcsdn的博客 1万+

数据仓库

数据仓库是一种信息系统,它能给一个组织或机构提供商务智能(business intelligence)以支持管理决策的制定。W.H.Inmon在《Building the Data Warehouse》一书中对数据仓库定义如下: 数据仓库是 面向主题的 集成的 稳定的 随时间增量的 数据集合,用以支持管理决策 这个定义说明了数据仓库中数据的组织方式以及建立数据仓库的目的是

qq_33751926的博客 343

第一次用

第一次用标签(空格分隔): 未分类老师帅去了 哈哈哈哈哈哈哈哈 哈哈哈哈哈哈哈哈哈 哈哈哈哈哈哈哈哈哈哈 hahahhaha 哈哈哈哈哈哈哈哈 哈哈哈哈哈哈哈 哈啊哈哈哈哈哈哈哈哈哈

ZLJ77777的博客 8377

日期格式化

<span>{{ comment.create_time|date:"Y-m-d H:i" }}</span>

zzijian的博客 7466

JZ18_二叉树的镜像

JZ18_二叉树的镜像 知识点:二叉树 题目链接 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 比如: 源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5 示例1 输入:

cjl的博客 1449

十月十五日总结

this.head = 0; this.end = 0; this.size = 0; }public void push(Object object) throws Exception { if (this.size > objects.length) throw new Exception("Queue is full!"); objects[en

ZLJ77777的博客 585
下一篇: 【POJ】poj 3009 (DFS)
三生石1103
博客等级 码龄12年 16粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值