POJ 1111 Image Perimeters
来源:互联网 发布:盐城seo 编辑:程序博客网 时间:2024/06/05 06:18
http://poj.org/problem?id=1111
搜索一个连通块并求其周长
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;const int N = 25;char map[N][N];int ans[N][N];int move[][2] = {{-1,0},{1,0},{0,-1},{0,1}};int m,n;bool IsIn(int x, int y){ if(x < 0 || x >= m || y < 0 || y >= n) return false; return true;}void DFS(int x, int y){ map[x][y] = '.', ans[x][y] = 1; for(int dx=-1; dx <=1; dx++){ for(int dy=-1; dy<=1; dy++){ if(!dx && !dy) continue; if(map[x + dx][y + dy] != 'X') continue; DFS(x + dx, y + dy); } } return;}int main(){// freopen("in.txt", "r", stdin); int x,y; while(scanf("%d%d%d%d",&m,&n,&x,&y) == 4){ if(!m && !n && !x && !y) break; memset(ans, 0, sizeof(ans)); for(int i=0; i<m; i++) scanf("%s",map[i]); DFS(x-1, y-1); int cnt = 0; for(int i=0; i<m; i++){ for(int j=0; j<n; j++){ if(ans[i][j]){ for(int k=0; k<4; k++){ int dx = i + move[k][0],dy = j + move[k][1]; if(!IsIn(dx, dy) || !ans[dx][dy]) cnt++; } } } } printf("%d\n",cnt); } return 0;}
0 0
- POJ 1111 Image Perimeters
- poj 1111 Image Perimeters
- POJ 1111 Image Perimeters
- Poj 1111 Image Perimeters
- POJ 1111 - Image Perimeters
- poj 1111 Image Perimeters
- POJ-1111-Image Perimeters
- poj 1111 Image Perimeters
- POJ 1111 Image Perimeters
- POJ:1111 Image Perimeters
- poj 1111:Image Perimeters
- POJ 1111 Image Perimeters
- POJ Image Perimeters 1111
- poj 1111 Image Perimeters
- POJ - 1111 Image Perimeters
- POJ 1111 Image Perimeters
- POJ 1111 Image Perimeters
- POJ 1111 Image Perimeters
- poj 1681 Painter's Problem 高斯消元
- IplImage和Mat的转换
- 二进制与java移位
- IIS Web服务扩展中添加ASP.NET4.0
- wps写程序代码首字母大写
- POJ 1111 Image Perimeters
- DIV的透明设置
- 开源协议许可证浅析
- GIT操作基本详解(2)
- 浮点数位模式和实体模式
- 【双连通分量】 FZU 2181 快来买肉松饼
- 找零钱——贪心
- zoj2110 - Tempter of the Bone (DFS + 奇偶性剪枝)
- 图像分割 (一)概述