给一个图,寻找十字交叉的个数,十字交叉应为两个大于3的奇数交叉与正中央。图的大小很小。

使用DFS搜八连块,之后按照规则筛选出符合条件的交叉。

我的筛选规则有点蠢,先将点排序,再通过三段for循环判断。

 #include <algorithm>
#include <cstring>
#include <ctype.h>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <string>
#include <queue>
#include <stack>
#include <cmath>
#include <set>
#include <map> using namespace std; struct Node{
int x;
int y;
bool operator < (const struct Node &b) const
{
if(x <= b.x)
{
if(x == b.x) return y <= b.y;
else return true;
}
return false;
}
}cross[]; int N,M,T;
char G[];
int vis[];
int dx[] = {,-,,},dy[] = {,,,-};
int P; void dfs(int u)
{
vis[u] = true;
cross[P].x = u%N;cross[P].y = u/N;
P++;
for(int i=;i<;i++)
{
int x = u%N + dx[i],y = u/N + dy[i];
if(x >= && x < N && y >= && y < N &&!vis[y*N+x] && G[y*N+x] == '#')
{
dfs(x+y*N);
}
}
} int main()
{
while(scanf("%d ",&N) && N)
{
char s[];
for(int i=;i<N;i++)
{
scanf("%s",s);
for(int j=;j<N;j++)
{
G[i*N+j] = s[j];
}
} memset(vis,,sizeof vis);
int ans = ;
for(int i=;i<N;i++)
{
for(int j=;j<N;j++)
{
if(G[i*N+j] != '#' || vis[i*N+j]) continue;
P = ;
dfs(i*N+j);
// printf("P=%d\n",P);
if(P % == || P < ) continue;
else
{
//printf("check\n");
sort(cross,cross+P);
/*
for(int i=0;i<P;i++)
{
printf("%d:(%d,%d)\n",i,cross[i].x,cross[i].y);
}
*/
int len = (P+)/,ok = ,step = ;
for(int i=;i<(len-)/;i++)
{
if(cross[i].x != cross[].x+i || cross[i].y != cross[].y) {ok = ;break;}
}
step += (len-)/;
for(int i=step;i < len+step;i++)
{
if(cross[i].y != (cross[step].y+i-step)
|| cross[i].x != cross[step].x
|| cross[step].x != cross[step-].x+
|| cross[step].y != cross[step-].y-(len-)/)
{ok = ;break;}
}
step += len;
for(int i=step;i< step + (len-)/;i++)
{
if(cross[i].x != (cross[step].x+i-step)
|| cross[i].y != cross[step].y
|| cross[step].y != cross[].y)
{ok = ;break;}
}
if(ok) ans++;
} }
}
printf("%d\n",ans);
}
}

HDU4414-DFS的更多相关文章

  1. hdu4414(DFS 找十字架数量)

    Problem Description The Nazca Lines are a series of ancient geoglyphs located in the Nazca Desert in ...

  2. BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]

    3083: 遥远的国度 Time Limit: 10 Sec  Memory Limit: 1280 MBSubmit: 3127  Solved: 795[Submit][Status][Discu ...

  3. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

  4. BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1352  Solved: 780[Submit][Stat ...

  5. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  6. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2545  Solved: 1419[Submit][Sta ...

  7. POJ_2386 Lake Counting (dfs 错了一个负号找了一上午)

    来之不易的2017第一发ac http://poj.org/problem?id=2386 Lake Counting Time Limit: 1000MS   Memory Limit: 65536 ...

  8. 深度优先搜索(DFS)

    [算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...

  9. 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序

    3779: 重组病毒 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 224  Solved: 95[Submit][Status][Discuss] ...

  10. 【BZOJ-1146】网络管理Network DFS序 + 带修主席树

    1146: [CTSC2008]网络管理Network Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 3495  Solved: 1032[Submi ...

随机推荐

  1. 11-(基础入门篇)WiFi模块开发,下载运行第一个程序

    https://www.cnblogs.com/yangfengwu/p/9954840.html 第一就是重新刷一下固件,咱们的固件保持一致,有问题好处理 先刷空固件 我用的 所以刷8Mbit的 给 ...

  2. ORA-10858:在要求输入数字处找到非数字字符

    今天在写sql语句的时候,运行报错:ORA-10858:在要求输入数字处找到非数字字符 在网上查了一下为什么会有这种错误,有一个建议是可能是写的sql语句中的日期没有处理.仔细看了一下自己写的代码 就 ...

  3. git使用备注

    git clone 代码库地址 git branch -r  查看远程分支 git branch 查看本地分支 git branch -a 查看远程和本地分支.带*的表示正在所处分支. git bra ...

  4. UOJ400/LOJ2553 CTSC2018 暴力写挂 边分治、虚树

    传送门--UOJ 传送门--LOJ 跟隔壁通道是一个类型的 要求的式子中有两个LCA,不是很方便,因为事实上在这种题目中LCA一般都是枚举的对象-- 第二棵树上的LCA显然是动不了的,因为没有其他的量 ...

  5. DataWorks使用小结(二)——功能面板使用指南

    一.数据开发 1.任务开发 新建表 野路子可以直接新建一个任务,粘贴DDL,手动运行任务即可完成建表 正常应当是在“数据管理”->数据表管理中建表: 支持可视化建表和DDL建表(配合之前的宏,建 ...

  6. Java 中单引号和双引号的区别

    引自:https://blog.csdn.net/hubianyu/article/details/39700367 单引号引的数据 是char类型的 双引号引的数据 是String类型的char定义 ...

  7. Ubuntu 安装google chrome

    sudo apt-get install google-chrome-stable /usr/bin/google-chrome-stable

  8. 【强化学习】python 实现 q-learning 迷宫通用模板

    本文作者:hhh5460 本文地址:https://www.cnblogs.com/hhh5460/p/10145797.html 0.说明 这里提供了二维迷宫问题的一个比较通用的模板,拿到后需要修改 ...

  9. 限流——spring-cloud-zuul-ratelimit

    先留个坑,慢慢补 git代码Demo:https://github.com/islowcity/spring-cloud-zuul-ratelimiter.git 有时间再写分析

  10. Linux配置mail客户端发送邮件

    1. 概述 在Linux操作系统环境中,可以配置邮件服务器,也可以配置邮箱客户端.本篇主要是配置邮件客户端,这对于发送服务器一些系统信息十分有必要. 2. mail客户端安装 2.1 安装mailx ...