给一个图,寻找十字交叉的个数,十字交叉应为两个大于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. SkylineGlobe 如何实现工程进度管理或者说是对象生命周期管理

    SkylineGlobe 的 TerraExplorer Pro里面,给我们提供了一个Timespan Tags工具,通过这个工具,我们可以设置ProjectTree任务组对象的生命周期: 然后通过调 ...

  2. 深度:Hadoop对Spark五大维度正面比拼报告!

    每年,市场上都会出现种种不同的数据管理规模.类型与速度表现的分布式系统.在这些系统中,Spark和hadoop是获得最大关注的两个.然而该怎么判断哪一款适合你? 如果想批处理流量数据,并将其导入HDF ...

  3. MIPI接口资料汇总(精)

    一.介绍 1.MIPI联盟,即移动产业处理器接口(Mobile Industry Processor Interface 简称MIPI)联盟.MIPI(移动产业处理器接口)是MIPI联盟发起的为移动应 ...

  4. java算法----排序----(3)冒泡排序

    package log; public class Test4 { /** * java算法---冒泡排序 * * @param args */ public static void main(Str ...

  5. 浅谈MySQL引擎(纯个人理解,如有错误请指正)

    MySQL有很多引擎,MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(BerkeleyDB).EXAMPLE.FEDERATED...等等 比较常用的就是InnoDB和MyI ...

  6. Java 大数、高精度模板

    介绍: java中用于操作大数的类主要有两个,一个是BigInteger,代表大整数类用于对大整数进行操作,另一个是BigDecimal,代表高精度类,用于对比较大或精度比较高的浮点型数据进行操作.因 ...

  7. 微服务监控zipkin+asp.net core

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 监控目录:微服务监控zipkin.skywalking以及日志ELK监控系列 一.zipkin介绍 zipkin是一种分布式跟踪系 ...

  8. iOS开发简记(1):指定APP的图标与启动图

    各位兄弟姐妹们,早上好,本人花了将近一个月的时间打造了一个完整的IOS版的App, 期间包括开发,测试,上线审核,现在花点时间把实现的过程分享给大家,“知音”app功能简单,适合对象为初学者,后面我会 ...

  9. Nginx+Tomcat+Memcached部署

    环境清单列表:(因为只有三台电脑,所有把Nginx和memcached放到一起) 应用服务器1:192.168.51.10: 应用服务器2:192.168.55.110: memcached服务器:1 ...

  10. 第三周Linux学习报告

    Linux内核源代码简介: arch/x86中内容重点关注 init目录重要,内核启动相关的代码基本上都在init目录下.如main.c等.Start_kernel函数相当于普通C程序的main函数. ...