HDU4414-DFS
给一个图,寻找十字交叉的个数,十字交叉应为两个大于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的更多相关文章
- hdu4414(DFS 找十字架数量)
Problem Description The Nazca Lines are a series of ancient geoglyphs located in the Nazca Desert in ...
- BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]
3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 1280 MBSubmit: 3127 Solved: 795[Submit][Status][Discu ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
- BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]
4196: [Noi2015]软件包管理器 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1352 Solved: 780[Submit][Stat ...
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
- POJ_2386 Lake Counting (dfs 错了一个负号找了一上午)
来之不易的2017第一发ac http://poj.org/problem?id=2386 Lake Counting Time Limit: 1000MS Memory Limit: 65536 ...
- 深度优先搜索(DFS)
[算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
- 【BZOJ-1146】网络管理Network DFS序 + 带修主席树
1146: [CTSC2008]网络管理Network Time Limit: 50 Sec Memory Limit: 162 MBSubmit: 3495 Solved: 1032[Submi ...
随机推荐
- Linux 局域网同步时间
选择一台能上外网的机器作为时间服务器(都不能上亦可以,任选一台即可,但是只能保证局域网内时间同步) 配置此时间服务器 安装 ntp 在 /etc/ntp.conf 中配置 restrict 127.0 ...
- 4.5《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)—第四章小结
本章相关重要命令总结在Table 6. 命令 描述 示例 mkdir <name> 创建某目录 $ mkdir foo pwd 显示当前所在目录 $ pwd cd <dir> ...
- Zookeeper-集群与单机实践
我用的是linux,CentOS7.3,zookeeper的版本是3.4.6,工具XShell.上传zookeeper的压缩包后我们开始操作. 集群模式: 1.解压zookeeper,路径随意 tar ...
- Redis对象占用内存分析
当你往Redis中插入了一系统对象,如何分析这些对象的占用情况? 1.我们可以在Redis的控制台使用info命令来查看各项指标,其中有一项是Memory,可以通过存储前后的used_memory差异 ...
- html5录音支持pc和Android、ios部分浏览器,微信也是支持的,JavaScript getUserMedia
以前在前人基础上重复造了一个网页录音的轮子,顺带把github仓库使用研究了一下,扔到了github上. 优势在于结构简单,可插拔式的录音格式支持,几乎可以支持任意格式(前提有相应的编码器):默认提供 ...
- Matlab入门笔记(1)
1.简单练习题: cos(((1+2+3+4+5)^3/5)^0.5) sin(pi^0.5)+log(tan(1)) 2^(3.5*1.7) exp(sin(10)) 2.实数,复数,行向量,列向量 ...
- 普通程序员看k8s基于角色的访问控制(RBAC)
一.知识准备 ● 上一节描述了k8s的账户管理,本文描述基于角色的访问控制 ● 网上RBAC的文章非常多,具体概念大神们也解释得很详细,本文没有站在高屋建瓴的角度去描述RBAC,而是站在一个普通程序员 ...
- Linux内核及分析 第八周 进程的切换和系统的一般执行过程
学习笔记: 一.进程调度与进程调度的时机分析 1.不同类型的进程有不同需求的调度需求: 第一种分类: —I/O-bound:频繁的进行I/O,通常会花费很多时间等待I/O操作的完成 —CPU-boun ...
- Android 學習之旅!(2)
早幾天因爲學車,弄了幾天時間和精力過去,今天終於考過了(科目二,還是補考的...)嗯..不管這麼多了..今天又開始我的android 學習之旅!! 筆記: platform-tools目錄下的文件: ...
- React16新特性
React的16版本采用了MIT开源许可证,新增了一些特性. Error Boundary render方法新增返回类型 Portals 支持自定义DOM属性 setState传入null时不会再触发 ...