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. FMDB的线程安全

    最近面试被问到FMDB的多线程处理问题,因为之前项目中是移植别人的代码,没有踩过这里的坑. 问题: 多线程同时访问数据库时,报数据库锁定的问题,错误信息是: Unknown error finaliz ...

  2. 《Cracking the Coding Interview》——第18章:难题——题目10

    2014-04-29 04:22 题目:给定一堆长度都相等的单词,和起点.终点两个单词,请从这堆单词中寻找一条变换路径,把起点词变成终点词,要求每次变换只能改一个字母. 解法:Leetcode中有Wo ...

  3. 【Balanced Binary Tree】cpp

    题目: Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced bin ...

  4. (原)Unreal 渲染模块引言Temp

            @author:白袍小道     引言 本文只在对Unreal渲染模块做一些详细的理解,务求能分析出个大概. 其中框架的思想和实现的过程,是非常值得学习和推敲一二的. 涉及资源系统,材 ...

  5. 剑指offer-重建二叉树04

    题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...

  6. 决策树之CART算法

    顾名思义,CART算法(classification and regression tree)分类和回归算法,是一种应用广泛的决策树学习方法,既然是一种决策树学习方法,必然也满足决策树的几大步骤,即: ...

  7. 网络编程--广播&组播

    广播 1.广播地址 如果用{netid, subnetid, hostid}( {网络ID,子网ID,主机ID})表示IPv4地址.那么有四种类型的广播地址,我们用-1表示所有比特位均为1的字段: 1 ...

  8. 冒泡排序js

    //    冒泡排序     var a = [1,3,2,4,5,3,2,1,4,6,7,7,6,6];     var b =[];     for(var i=0;i<a.length;i ...

  9. Java 循环队列的实现

    队列概念 队列(Queue)是限定只能在一端插入.另一端删除的线性表.允许删除的一端叫做队头(front),允许插入的一端叫做队尾(rear),没有元素的队列称为“空队列”. 队列具有先进先出(FIF ...

  10. windows系统查找文件-通配符的使用

    在windows中可以使用通配符“* ”.“? ”查找文件.对于相同字符开头的单词和相同字符结尾的单词可以用“<”和“ >”通配符查找单词.1.如果要查找: 任意单个字符 :键入 ? 例如 ...