在搜1011的时候误搜了1111,简单BFS吧,多一个X就是多四个面,每次看看他的四个面有多少个重复的,然后剪掉,最后答案加上就好了;

code:

//#include <bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<queue>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
char ma[25][25];
int n,m,sx,sy; struct asd{
int x,y;
};
bool vis[25][25];
int dx[8]={0,0,-1,1,-1,1,1,-1};
int dy[8]={-1,1,0,0,-1,1,-1,1}; int BFS()
{
int ans=0;
asd now,nex;
memset(vis,0,sizeof(vis));
queue<asd>q;
now.x=sx-1;
now.y=sy-1;
vis[now.x][now.y]=true;
q.push(now);
while(!q.empty())
{
now=q.front();q.pop();
int temp=4;
for(int i=0;i<8;i++)
{
int xx=now.x+dx[i];
int yy=now.y+dy[i];
if(ma[xx][yy]=='.'||xx<0||yy<0||xx>=n||yy>=m)
continue;
if(i<4&&ma[xx][yy]=='X')
temp--;
if(vis[xx][yy]) continue;
vis[xx][yy]=1;
nex.x=xx;
nex.y=yy;
q.push(nex);
}
// printf("%d\n",temp);
ans+=temp;
}
return ans;
} int main()
{
while(~scanf("%d%d%d%d",&n,&m,&sx,&sy))
{
if(!n&&!m&&!sx&&!sy) break;
for(int i=0;i<n;i++)
scanf("%s",ma[i]);
printf("%d\n",BFS());
}
return 0;
}

最新文章

  1. Java内存与垃圾回收调优
  2. jquery的promise实践--连续加载图片
  3. opencv 中对一个像素的rgb值或像素值进行操作的几个常用小办法【转】
  4. webrtc公开课
  5. 项目管理10000 hours – 瞎扯谈系列
  6. 【C】 06 - 标准库概述
  7. JavaScript 学习—— js获取行间样式和非行间样式
  8. Ibatis学习总结2--SQL Map XML 配置文件
  9. Scrum10-22
  10. javascript高级编程笔记01(基本概念)
  11. mysql 资料总结 长期更新
  12. 总结iOS 8和Xcode 6的各种坑
  13. C# 根据IP查询地址归属地
  14. android手电筒开发
  15. 面试题-Java基础-线程部分
  16. linux pci 协议一
  17. Vim 命令图解-Gvim使用笔记-2017-5-9
  18. day 7-21 pymysql模块
  19. linux软件管理之源码包管理
  20. PAT 1041 考试座位号(15)(代码)

热门文章

  1. 关于erlang解析json数据
  2. springboot中tomcat找不到jsp页面【转载】
  3. mongodb的锁和高并发
  4. Android Handle,Looper,Message消息机制
  5. spawn类expect方法详解
  6. linux host=${host:-&quot;localhost&quot;}使用方法
  7. 我所认为的KVC和KVO
  8. CSS3学习笔记(3)—左右飞入的文字
  9. struts2 session登录
  10. codeforces 664A A. Complicated GCD(水题)