poj 1111 dfs求面积问题
来源:互联网 发布:研究生小论文数据造假 编辑:程序博客网 时间:2024/06/07 00:11
题目链接 https://vjudge.net/contest/146654#problem/K; http://poj.org/problem?id=1111;
首先,来说说我的思路吧,最近在做dfs但只会一些简单题,就以这道题为例子来帮助自己回忆一下dfs的套路吧。嘿嘿
题目大意就是给你一个图和一个点 你用算出这个点X区域组成的 面积。刚开始也是不知道这咋整,因为这个图像并不是规则的。但观察久了就会发现这个图形的面积就
等于附近的“点”的数目。但又有一个问题了,边缘点没有点怎么读入,这里我就采用了初始化地图时候用的 memset(map,'.',sizeof(map));这一步然后读入图的时候从1开始读入
这样就可以判断边缘点的点的数目。
其次,还有一点 我wa了好多次才发现的,边缘点不能用vis数组标记 如果标记的话会漏算好多的。
看着说起来蛮轻松的,其实实现起来快让我崩溃了,然后慢慢研究题解才有了点思路。
#include <iostream>#include<stdio.h>#include<string.h>using namespace std;char map[30][30];bool vis[30][30];int dir[8][2]={0,-1 ,0,1 ,-1,0 ,1,0 ,-1,-1 ,-1,1, 1,-1 ,1,1};int di1[4][2]={0,-1 ,0,1 ,-1,0 ,1,0};int n,m,x,y,sum;bool check(int x,int y){ if(x<0||x>n+1||y<0||y>m+1) return 0; return 1;}void dfs(int x,int y){ if(check(x,y)==0||map[x][y]!='X') return; vis[x][y]=1; int xx,yy; for(int j=0;j<4;j++) { xx=x+di1[j][0]; yy=y+di1[j][1]; if(check(xx,yy)&&map[xx][yy]=='.'&&vis[xx][yy]==0) { ++sum; } } for(int i=0;i<8;i++) { int dx,dy; dx=x+dir[i][0]; dy=y+dir[i][1]; if(check(dx,dy)&&vis[dx][dy]==0&&map[dx][dy]=='X') { dfs(dx,dy); } } return;}int main(){ while(scanf("%d%d%d%d",&n,&m,&x,&y)!=EOF) { getchar(); if(n==0||m==0||x==0||y==0) break; memset(vis,0,sizeof(vis)); memset(map,'.',sizeof(map)); sum=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf(" %c",&map[i][j]); dfs(x,y); printf("%d\n",sum); } return 0;}
0 0
- poj 1111 dfs求面积问题
- poj 4022 ASCII Area dfs求二维面积
- poj 1111 dfs 求周长
- poj 3907 求多边形面积
- POJ 1654 求多边形面积
- poj 3984 迷宫问题 dfs 求迷宫路径
- DFS求迷宫问题
- POJ 1654 Area (有向面积求多边形面积)
- poj 2546 两圆相交求面积
- POJ 2826 两线段关系求面积
- POJ 1654 Area 求多边形的面积
- POJ 1654 || Area(求多边形面积
- POJ 1654 Area (求多边形面积)
- poj 1265 <Pick定理求面积>
- POJ-1654Area(求多边形面积)
- POJ 2079 求最大三角形面积
- !POJ 1111--DFS(求块的周长)
- poj 1111 dfs(求连通块周长)
- HDU 5732 Subway(树同构)
- 简单的二分查找条件
- c/c++ 练习笔记
- 第17章 控件模版(4)——事件触发器
- 226. Invert Binary Tree [LeetCode]
- poj 1111 dfs求面积问题
- spring data elasticsearch在集群新建了索引出现unsigned
- Oracle常用字符集
- powershell如何ping
- .htaccess .htpasswd 访问密码设置
- css3 transform
- CS0012: 类型“System.Web.Routing.RouteValueDictionary”在未被引用的程序集中定义。必须添加对程序集“System.Web.Routing, Version
- hook Android系统调用的乐趣和好处
- C++中string构造函数的解析