POJ 1111 Image Perimeters
来源:互联网 发布:计算机二级vb选择题 编辑:程序博客网 时间:2024/06/14 04:27
题目大意:
输入一个矩阵,再输入其中一个“X”的位置(从1开始)。从该位置向八个方向扩展,如果是“X”就可以并在一起。问最后得到的模块的周长是多少。
网上说这题用广搜比较好。。。不过我还没看,用了深搜。
找到连续的图像不麻烦,但是计算周长难到我了。
每个方块初始周长都是4,如果它四周每存在一个方块周长就会减少1,把每个方块的有效周长加在一起就是这个图像的周长。
#include <iostream>#include <string.h>#include <stdio.h>#include <math.h>#include <map>#include<queue>using namespace std;int xa,ya,posx,posy;int isok[105][105];int dis1[8]={0,0,1,-1,-1,-1,1,1,};int dis2[8]={1,-1,0,0,-1,1,-1,1};int res;void dfs(int x,int y){ int c=4; if(isok[x][y]==3) return; isok[x][y]=3; for(int i=0;i<8;i++) { int xx=x+dis1[i]; int yy=y+dis2[i]; if((!isok[xx][yy])||xx<0||yy<0||xx>=xa||yy>=ya) continue; dfs(xx,yy); if(dis1[i]==0||dis2[i]==0) c--; } res+=c;}int main(){ while(cin>>xa>>ya>>posx>>posy) { if(!(xa||ya||posx||posy)) break; res=0; for(int i=0;i<xa;i++) { char c; for(int j=0;j<ya;j++) { cin>>c; if(c=='X') isok[i][j]=1; else isok[i][j]=0; } } dfs(posx-1,posy-1); cout<<res<<endl; }}
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
- 第二天
- web前端面试题集锦
- Session机制详解
- URL详解
- JavaScript王者归来02
- POJ 1111 Image Perimeters
- 2015年第六届蓝桥杯省赛(C/C++ B组)第七题
- Android 自定义ViewGroup 实战篇 -> 实现FlowLayout
- C语言 Static关键字
- 【树DP】UVA12929Aerial Tramway
- Callable和Future实现调用任务并返回结果数据
- linux grep命令
- 织梦js广告不显示原因,dedecms后台不显示广告预览(最新2016年2月29日)
- 算法学习----->Insertsort(插入排序)