1145 求图像的周长
来源:互联网 发布:豫品软件 编辑:程序博客网 时间:2024/04/27 23:03
描述
给一个用 . 和X表示的图形,图形在上、下、左、右、左上、左下、右上、右下8个方向都被看作是连通的,并且图像中间不会出现空洞,求这个图形的边长。
输入
首先给出m、n、x、y四个正整数,下面给出m×n的图形,x、y表示点击的位置,全0表示结束。
输出
点击的图形的周长。
输入样例
2 2 2 2 XX XX 6 4 2 3 .XXX .XXX .XXX …X ..X. X… 0 0 0 0
输出样例
8 18
提示
参考迷宫问题,实现时关键要解决好各块的表示问题。
#include <iostream>using namespace std;int m,n,x0,y0; //图像长宽,点击位置char a[10][10]; //图像int state[10][10]; //每一个位置的当前状态int sum; //周长int cango(int x,int y){ if(x>=0&&x<m&&y>=0&&y<n&&a[x][y]=='X'&&state[x][y]==0) //在范围内且为X且没有遍历过的可以继续递归搜索 return 1; return 0;}int bound(int x,int y){ if(x<0||x>=m||y<0||y>=n||a[x][y]=='.') return 1; return 0;}void search(int x,int y){ state[x][y]=1; //遍历过的位置状态设为1 if(bound(x-1,y)) //每个位置的四周是边界时才用加周长,所以加周长的有四种情况 sum++; if(bound(x+1,y)) sum++; if(bound(x,y-1)) sum++; if(bound(x,y+1)) sum++; if(!cango(x-1,y)&&!cango(x+1,y)&&!cango(x,y-1)&&!cango(x,y+1) &&!cango(x-1,y-1)&&!cango(x+1,y+1)&&!cango(x+1,y-1)&&!cango(x-1,y+1)) return; else { if(cango(x-1,y)) //八个状态都要search search(x-1,y); //上、下、左、右、左上、右上、左下、右下 if(cango(x+1,y)) search(x+1,y); if(cango(x,y-1)) search(x,y-1); if(cango(x,y+1)) search(x,y+1); if(cango(x-1,y-1)) search(x-1,y-1); if(cango(x+1,y+1)) search(x+1,y+1); if(cango(x+1,y-1)) search(x+1,y-1); if(cango(x-1,y+1)) search(x-1,y+1); }}int main(){ int i,j; while(true) { sum=0; cin>>m>>n>>x0>>y0; if(m==0&&n==0&&x0==0&&y0==0) break; for(i=0;i<m;i++) for(j=0;j<n;j++) cin>>a[i][j]; if(a[x0-1][y0-1]=='.') //如果点击的位置是.,直接输出周长为0 cout<<0<<endl; else { for(i=0;i<m;i++) for(j=0;j<n;j++) state[i][j]=0; //初始化状态位 search(x0-1,y0-1); cout<<sum<<endl; } } return 0;}
0 0
- 1145 求图像的周长
- 1145 求图像的周长
- 求图像的周长
- 求图像的周长
- 求图像的周长
- 求图像的周长
- 求图像的周长
- 求图像的周长(ZOJ1047)
- 求图像的周长(深搜)
- 求图像周长问题
- 回溯法——求图像的周长
- C/C++——求图像的周长
- 求圆的周长
- 求图形的周长
- 求周长
- C语言中的求图像周长问题(ZOJ 1047)
- NPU17届程序设计作业5 求图像周长
- d005: 求圆的周长 和 面积
- 数据结构---并查集
- python list.remove(),del()和filter & lambda
- grunt实践(target,option,task)
- 2012届华为校园招聘机试题(java实现)
- 感想
- 1145 求图像的周长
- c语言标准库中字符转换函数和数字转换函数
- 与用户谈需求注意
- java工具类Date 日期类应用
- Java中接口和抽象类有哪些区别
- [MRI]核磁共振头线圈和体线圈
- Android开发案例:SQLite数据库和ListView列表结合
- 黑马程序员 oc随机 分类与延展
- Java垃圾回收机制