http://newoj.acmclub.cn/problems/1999

1999: 三角形or四边形?

描述

题目描述:

JiangYu很无聊,所以他拿钉子在板子上戳出了一个由.#组成的10*10八联通点阵图。 请机智的你判断图中的#组成的是三角形还是四边形?

其中一种3 jiao *为

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . # . . . . .

. . . # . # . . . .

. . # . . . # . . .

. # . . . . . # . .

######### .

. . . . . . . . . .

. . . . . . . . . .

其中一种4 bian *为

. . . . . . . . . .

. . . . . . . . . .

. ########.

. # . . . . . . #.

. # . . . . . . #.

. # . . . . . . #.

. ########.

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

输入:

一个10*10点阵图

输出:

三角形输出"3 jiao *“ 四边形输出"4 bian *”

样例输入
..........
..........
..........
....#.....
...#.#....
..#...#...
.#.....#..
#########.
..........
..........
样例输出
3 jiao *
提示
描述

题目描述:

JiangYu很无聊,所以他拿钉子在板子上戳出了一个由.#组成的10*10八联通点阵图。 请机智的你判断图中的#组成的是三角形还是四边形?

其中一种3 jiao *为

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . # . . . . .

. . . # . # . . . .

. . # . . . # . . .

. # . . . . . # . .

######### .

. . . . . . . . . .

. . . . . . . . . .

其中一种4 bian *为

. . . . . . . . . .

. . . . . . . . . .

. ########.

. # . . . . . . #.

. # . . . . . . #.

. # . . . . . . #.

. ########.

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

输入:

一个10*10点阵图

输出:

三角形输出"3 jiao *“ 四边形输出"4 bian *”

【分析】:

斜四边形:行2尖以及列2尖、 平四边形:0尖、 梯形:1个行尖,0个列尖

正放三角形:1个行尖、倒放三角形:1个列尖    (但是另一个都不为0)

【BFS】:

 随便从一个点dfs,有8个方向。只要改变一次方向就有一个角,记录他有几个角,

 注意遍历方向的顺序 

【代码】:

#include<iostream>
#include<algorithm>
#include<string.h>
#include<cstring>
#include<cstdio>
using namespace std;
#define ll long long
#define ull unsigned long long
#define mod 1000000007
#define inf 0x3f3f3f3f
#define N 15
using namespace std;
char s[N][N]; const int dx[]={-,,,,,,-,-};
const int dy[]={-,-,-,,,,,}; bool ok(int x, int y) //未越界+遇到#
{
return x>= && y>= && x< && y< && s[x][y]=='#';
} int dfs(int x, int y, int d)
{
int res = ;
s[x][y]='.';
int nx = x + dx[d],ny = y + dy[d];
if(!ok(nx,ny)) res++;
else return res+=dfs(nx,ny,d);
for(int i=;i<;i++)
{
int nx=x+dx[i],ny=y+dy[i];
if(ok(nx,ny)) return res+=dfs(nx,ny,i);
}
return res;
} int main()
{
for(int i=;i<;i++)
scanf("%s",s+i);
int cnt=;
for(int i=;i<;i++){
for(int j=;j<;j++){
if(s[i][j]=='#')
cnt = dfs(i,j,);
}
}
if(cnt>) puts("4 bian *");
else puts("3 jiao *");
} /*
保证每条边长度>2,保证所有的#之间是联通的。 ..#.......
.#.#......
#####.....
..........
..........
..........
..........
..........
..........
.......... ....#.....
...##.....
..#.#.....
...##.....
....#.....
..........
..........
..........
..........
.......... ...#......
..#.#.....
.#...#....
..#.#.....
...#......
..........
..........
..........
..........
.......... ..........
..........
..........
..........
..........
..........
..........
.....###..
.....#.#..
.....###.. ....#.....
...##.....
..#.#.....
.#..#.....
.####.....
..........
..........
..........
..........
.......... ....#.....
...##.....
..#.#.....
.#..#.....
#####.....
..........
..........
..........
..........
..........
*/

DFS

#include<iostream>
#include<algorithm>
#include<string.h>
#include<cstring>
#include<cstdio>
using namespace std;
#define ll long long
#define ull unsigned long long
#define mod 1000000007
#define inf 0x3f3f3f3f
#define N 15
using namespace std;
char s[N][N]; int main()
{ int f=,f1=,cnt,cnt1;
for(int i=;i<;i++)
gets(s[i]);
for(int i=;i<;i++)
{
cnt=cnt1=;
for(int j=;j<;j++)
{
if(s[i][j]=='#')
cnt++;
if(s[j][i]=='#')
cnt1++;
}
if(cnt == ) {
f++ ;
}
if(cnt1 == ){
f1++;
}
} if(f==&&f1!= || f1==) puts("3 jiao *");
else puts("4 bian *"); return ;
} /*
保证每条边长度>2,保证所有的#之间是联通的。 ..#.......
.#.#......
#####.....
..........
..........
..........
..........
..........
..........
.......... ....#.....
...##.....
..#.#.....
...##.....
....#.....
..........
..........
..........
..........
.......... ...#......
..#.#.....
.#...#....
..#.#.....
...#......
..........
..........
..........
..........
.......... ..........
..........
..........
..........
..........
..........
..........
.....###..
.....#.#..
.....###.. ....#.....
...##.....
..#.#.....
.#..#.....
.####.....
..........
..........
..........
..........
.......... ....#.....
...##.....
..#.#.....
.#..#.....
.####.....
..........
..........
..........
..........
..........
*/

模拟

NEUQOJ 1999: 三角形or四边形?【搜索联通块/模拟】的更多相关文章

  1. POJ 2386 Lake Counting(搜索联通块)

    Lake Counting Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 48370 Accepted: 23775 Descr ...

  2. Codeforces 731C. Socks 联通块

    C. Socks time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard input o ...

  3. 分别利用并查集,DFS和BFS方法求联通块的数量

    联通块是指给定n个点,输入a,b(1<=a,b<=n),然后将a,b连接,凡是连接在一起的所有数就是一个联通块: 题意:第一行输入n,m,分别表示有n个数,有输入m对连接点,以下将要输入m ...

  4. Codeforces Round #369 (Div. 2) D. Directed Roads dfs求某个联通块的在环上的点的数量

    D. Directed Roads   ZS the Coder and Chris the Baboon has explored Udayland for quite some time. The ...

  5. Educational Codeforces Round 5 - C. The Labyrinth (dfs联通块操作)

    题目链接:http://codeforces.com/contest/616/problem/C 题意就是 给你一个n行m列的图,让你求’*‘这个元素上下左右相连的连续的’.‘有多少(本身也算一个), ...

  6. 【UVA10765】Doves and bombs (BCC求割点后联通块数量)

    题目: 题意: 给了一个联通无向图,现在问去掉某个点,会让图变成几个联通块? 输出的按分出的从多到小,若相等,输出标号从小到大.输出M个. 分析: BCC求割点后联通块数量,Tarjan算法. 联通块 ...

  7. POJ 1523 SPF (去掉割点能形成联通块的个数)

    思路:使用tarjan算法求出割点,在枚举去掉每一个割点所能形成的联通块的个数. 注意:后来我看了下别的代码,发现我的枚举割点的方式是比较蠢的方式,我们完全可以在tarjan过程中把答案求出来,引入一 ...

  8. HDU - 1213 dfs求联通块or并查集

    思路:给定一个无向图,判断有几个联通块. AC代码 #include <cstdio> #include <cmath> #include <algorithm> ...

  9. [洛谷P1197/BZOJ1015][JSOI2008]星球大战Starwar - 并查集,离线,联通块

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...

随机推荐

  1. 网页图片很多时,加载完后再加载图片(defer:延迟加载)

    图片影响页面加载速度,可以先加载完页面,再去加载图片. defer:告诉浏览器,这里面的js代码不影响网页脚本解析,可以解析完html脚本再执行这段js代码(个人理解). 网页代码:<img s ...

  2. Percona-Tookit工具包之pt-table-usage

      Preface       There always be some table join operations in our SQL statement.Although we can know ...

  3. Python第三方模块tesserocr安装

    介绍 在爬虫过程中,难免会遇到各种各样的验证码,而大多数验证码还是图形验证码,这时候我们可以直接用 OCR 来识别. tesserocr 是 Python 的一个 OCR 识别库 ,但其实是对 tes ...

  4. mysql基础知识点整理

    数据库与数据表的创建.修改.删除 创建数据库: Create database 数据库名 删除数据库: drop database 数据库名 修改字符集为utf8并指定校对集(mysql默认字符集为l ...

  5. Python学习-day17 jQuery method and demo

    一:介绍: jQuery:是DOM和js的封装.jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多).现在大多数的pc端的网站都 ...

  6. STL之queue&stack使用简介

       queue 队列也是一个线性存储表,与后进先出的堆栈不同,元素数据的插入在表的一端进行,在另一端删除,从而构成了一个先进先出(First In First Out) 表.插入一端称为队尾,删除一 ...

  7. 【转】mysql 计划事件

    转自:http://www.cnblogs.com/c840136/articles/2388512.html MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件.定时任务机制,在 ...

  8. iis如何处理并发请求

    文章:IIS是怎么处理同时到来的多个请求的? 文章:你真的了解:IIS连接数.IIS并发连接数.IIS最大并发工作线程数.应用程序池的队列长度.应用程序池的... 文章:IIS最大工作进程数设置引发串 ...

  9. vue vscode 开始

    E:\Html\4 Vue版>npm config set registry https://registry.npm.taobao.org E:\Html\4 Vue版>npm i &g ...

  10. Linux命令 -磁盘和文件系统类

    声明:本文所涉及到的Linux命令均为最常见的用法,未列举之参数,自行查阅man 1.df 磁盘容量 -h 以人类易读方式展示(GB.KB)等 df -h /usr 2.du 文件或目录的容量 -s ...