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. WPF调用摄像头

    添加程序集:WPFMediaKit.dll 更关键代码如下: 界面设计代码如下: <Window x:Class="摄像头调用.MainWindow" xmlns=" ...

  2. Python全栈工程师 (exercises)

    # 1:给定一个数,判断他是正数,负数,还是0 a = int(input("请输入一该个整数")) if a == 0: print(a, "是0") eli ...

  3. Leetcode 662.二叉树最大宽度

    二叉树最大宽度 给定一个二叉树,编写一个函数来获取这个树的最大宽度.树的宽度是所有层中的最大宽度.这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空. 每一层的宽度被定义 ...

  4. LINQ to Entities 不识别方法“System int string 转换的问题

    这个问题困扰了挺久,网上找了挺多方法 都太好使. 分几种情况. 1.如果查询结果 转换,那比较容易. var q = from c in db.Customers where c.Country == ...

  5. CSS3 em && rem 详细教程

    1 # mobile css & rem & em & px > 1 rem === 16px 任意浏览器的默认字体高都是 16px, 所有未经调整的浏览器都符合: 1e ...

  6. 设计模式之单例模式与工厂模式的Python实现(一)

    1. 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上 ...

  7. 纯css美化复选框,单选框,滑动条(range)

    <div class="box"> <!-- 借鉴地址:http://www.cnblogs.com/xiaoxianweb/p/5465607.html --& ...

  8. 《R语言实战》读书笔记--第一章 R语言介绍

    1.典型的数据分析过程可以总结为一下图形: 注意,在模型建立和验证的过程中,可能需要重新进行数据清理和模型建立. 2.R语言一般用 <- 作为赋值运算符,一般不用 = ,原因待考证.用-> ...

  9. ACdream 1025 bfs

    Transform Time Limit: 4000/2000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submit St ...

  10. eclipse增加jar包方式对比

    add external jars  = 增加工程外部的包add jars = 增加工程内包add library = 增加一个库add class folder = 增加一个类文件夹 add jar ...