poj1111(单身快乐)

Image Perimeters

Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 9183   Accepted: 5426

Description

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

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 Outpu8 18 40 48 8

题意:这道题可以看作一个感染的样例,给定一个矩阵,指定一个母体X的位置,处在这个X周围8个位置内的X都会被感染,被感染的X仍可以感染它周围8个位置,最后直到无法感染位置。要求的就是最后得到的被感染的图形周长。
分析图形可以知道,.相当于被感染X的隔离带,需要求的就是隔离带的长度,被感染的X周围有1个.,周长就会+1,最终的周长就是被感染的X周围.的和。

思路:将输入的矩阵周围用.包一圈,然后用DFS进行遍历,在遍历的同时统计被感染X周围的.数量,遍历结束得到周长

下面给出AC代码:

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 char M[30][30];
 5 int dir[8][2] = { { 1,0 },{ 0,1 },{ 0,-1 },{ -1,0 },{ 1,-1 },{ -1,-1 },{ -1,1 },{ 1,1 } };//→↑←↓
 6 int DFS(int m, int n)
 7 {
 8     int sum = 0;
 9     if (M[m][n] == ‘0‘ || M[m][n] == ‘.‘) return 0;
10     M[m][n] = ‘0‘;
11     for (int i = 0;i < 4;i++)
12     {
13         if (M[m + dir[i][0]][n + dir[i][1]] == ‘.‘)
14             sum++;
15     }
16     for (int i = 0;i < 8;i++)
17     {
18         sum = sum + DFS(m + dir[i][0], n + dir[i][1]);
19     }
20     return sum;
21 }
22 int main()
23 {
24     int l, w, x, y;
25     while (cin >> l >> w >> x >> y)
26     {
27         if (l == 0 && w == 0)
28             return 0;
29         memset(M, ‘.‘, sizeof(M));
30         for (int i = 1;i <= l;i++)
31             for (int j = 1;j <= w;j++)
32                 cin >> M[i][j];
33         int sum;
34         sum = DFS(x, y);
35         cout << sum << endl;
36     }
37     return 0;
38 }

这是我第一篇博客,为了庆祝我单身快乐,1111送给自己。

希望各位大大能够对我多指导指导,感谢~!感谢~~!感谢~~~!

时间: 2024-10-12 19:17:48

poj1111(单身快乐)的相关文章

10.21html 标签

网页的标题 字体控制标签 回车换 同时包含锚点连接行 加粗 倾斜 下划线 要使内容居中显示 空格 < 小于号 >大于号 © 圈C 标题一 标题二 标题三 标题四 标题五 标题六 段落 段落显示时在每段的的上下分别空一行 层 段落显示时在每段的的上下分别空一行,段程序及黑色在南京结婚落 标签 闹瞌睡的飞机票 单身快乐 闹瞌睡的飞机票 单身快乐 百度,这是超链接 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E

我想的一些建议

虽然交往过的女生不多,虽然对女生依旧不是很了解,但是我来说说男生的心里吧! (仅仅是对于学技术的人而言,其他科的鸟,自行绕道) 我们的生活中的大多数人,总是希望别人可以包容你的一切.所以大概才会有人可以肆无忌惮,乃至得意忘形.可以毫不掩饰的去侮辱别人,诋毁别人,没有半点的歉意,还觉得自己很了不起.  你现在是可以了不起,因为在大学只要是个女的,都可以了不起.但是以后呢 ? ----------------------换位思考.你所忍受不了的,别人却忍受了x次,而依旧面带微笑.如果是你?  画面请

OSChina 周四乱弹 —— 听说圣诞节和单身狗更配哦

周四,剩单快乐! 周三又是个不寻常的日子,西方节日总是充斥着各种故事 昨天由@叶秀兰  童鞋引发了众多 OSCer 对@红薯  和 @永和  之间爱恨情仇的各种纠结故事,这里小小编整理了一个全集,供大家欣赏,希望能给大家带来一些些灵感-(永和和红薯不得不说的爱恨情仇:http://my.oschina.net/xxiaobian/blog/360230) 也会激发 N 多 OSCer 的情怀! @blindcat  :1厨1卫1人住,1菜1汤1人吃,1枕1被1人睡,1来1去1人过,1衣1袜1人洗

【转】单身是最好的增值时期

转:http://www.vikilife.com/126061.html 文/老杨           二十几岁开始,我渐渐被迫习惯了一个人的时光,仿佛作为一个成年个体,从这个年龄出发,就有了必须要独自去经营和挑战的生活,和他人再无牵扯的关联.于是在那些孤独的日子里,我一个人找工作,一个人吃闭门羹,一个人决心辞职.一个人看一场刺激暴力的枪杀片, 3D眼镜里的子弹嗖嗖地射在我身上,我捂着胸口,被一群扭曲在一起的情侣包围着,一个人暗暗流着泪.      可是长久以来,我的精神异常空虚,生活严重缺乏

软件工程师为什么单身的六宗罪

本人做软件工程师虽不过2年,但基于对软件工程师这一职业的关 注和热爱,结合本人之经验教训,将软件工程师的罪孽总结如下,希望能引起软件工程师朋友的重视, 并一一对号入座,适时发现并纠正自身之罪孽,这将有助于软件工程师整体素质的提高.(仅供参考) 1.太过劳累,麻痹生活 杀伤力:10级 软件工程师的生活普遍没有规律,有一句名言,一个真正的软件工程师从不按早9晚5的生活过日 子.这并非软件工程师独有的罪孽,随着社会竞争的加剧,中国很多其他职业也同时存在这一问题,只 是在软件工程师这一独特群体身上体现的

不要看不起刷题,对于普通人来说,这个更重要。“快乐教育”,会对知识的兴趣。博雅教育,等坚船厉炮以来,就成渣渣了(另一方面由于中国的崛起,世界真的改变了,而且风口更多)

事实上他教了黄蓉打狗棒法,并且黄蓉学的非常好.降龙十八掌黄蓉学不了,因为这个是阳刚的路子,不适合女人. 你这个学校肯定是私立的,肯定比公立的好些.不过嘛,其实这种学校是拼家长的:孩子学了一大堆精英做派,什么分享啦.创意啦,这些都很好:问题是,怎么才能先变成精英阶层呢? 一个扫大街的人.端盘子的人需要很有创意吗?换个角度,一个普通人的孩子和比尔盖茨的孩子上同一个学校,玩的一样好,最后他们能取得一样的成就吗? 所以不要看不起刷题,对于普通人来说,这个更重要. https://www.ccthere.

江西理工大学南昌校区排名赛 E: 单身狗的种树游戏

题目描述 萌樱花是一只单身狗. 萌樱花今天决定种树,于是他来到了自己家的后院. 萌樱花的后院有n个树坑,所有树坑排列在一行上,每一个树坑都可以种一棵树,相邻树坑间的距离为1,现在所有的树坑都是空着的. 作为一只单身狗,他决定种上至少k棵树来保护环境. 为了让树苗宝宝健康快乐地生长,他要求任意两棵树之间的距离至少为m,请问这样种树的方案数是多少? 输入 1<=n,k,m<=21 输入格式: n k m 输出 输出种树的方案数 样例输入 3 2 2 样例输出 1 #include<iostr

2018年10月小结(流水账) -- 1024程序员节快乐

2018年10月小结-- 1024程序员节快乐 今天刚好是1024程序员节.最近两个月没有更新博客,主要是最近有点迷茫,好像对技术丧失了热情,好像提不起兴趣.加上一些事情,感觉好累,好困,好迷茫.每当夜深人静的时候,有时会留下不知为什么的眼泪. 这两个月主要做基于公众号的WiFi故事机.原理很简单的,就是微信用户绑定一台故事机设备,然后公众号通过WebSocket发送命令到设备.实现微信互聊,故事点播,设备控制等简单功能.这个项目没什么技术含量的,至于卖的好不好暂时还不清楚. 就是这样一个一个小

这篇文章,或许可以改善你的不快乐。

精华句子: 生命的意义和最终目的到底是什么,目前我的答案却只有一个,很简单的一个,那便是“寻求真正的自由”,然后享受生命. 为何觉得自己卑微呢?你觉得卑微是因为没有用自己的主观眼在观看自己,而用了社会一般的功利主义的眼光. 一个不欣赏自己的人,是难以快乐的. 房间布置得美丽,是享受生命改变心情的第一步. 你看,如果我是你,我慢慢地在变了. 慢慢地,我不再那么自卑了,我勇于接触善良而有品德的人群(这种人在社会上仍有许多许多),我会发觉,原来大家都很平凡——可是优美,正如自己一样. 不快乐的女孩子,