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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机号销户话费怎么办 微信Q币充错怎么办 淘宝q币充错了怎么办 移动充值错误怎么办 qq忘记密码怎么办登陆 sql数据库满了怎么办 微信充值话费不到账怎么办 填报志愿密码错误怎么办 校园卡被冻结了怎么办 充值卡密码丢了怎么办 联通手机号码不支持开黄钻怎么办 手机qq加载失败怎么办 qq红包额度上限怎么办 qq红包超出限额怎么办 qq红包超过限额怎么办 红包过期没退回怎么办 qb充值错了号码怎么办 天猫q币充值被骗怎么办 微信充错了q币怎么办 qq钱包没银行卡怎么办 qq钱包被限制怎么办 充流量未到账怎么办 云客服被冻结怎么办 联通话费注销了怎么办 我的话费太多怎么办 lol充错账号怎么办 支付宝手机充值没到账怎么办 支付宝限额10000怎么办 米币超过限制怎么办 忘记财付通支付密码怎么办 支付宝忘记登陆密码怎么办 三位数密码忘记了怎么办 登入密码忘记怎么办 电脑登录忘记密码怎么办 支付宝忘记密码怎么办 密码箱忘了密码怎么办 信用卡忘了密码怎么办 我没有财付通钱没有了怎么办 发红包忘记密码怎么办 手机怎么办理财付通 忘记qq红包密码怎么办