POJ1111【BFS】
2024-09-05 20:13:43
在搜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;
}
最新文章
- Java内存与垃圾回收调优
- jquery的promise实践--连续加载图片
- opencv 中对一个像素的rgb值或像素值进行操作的几个常用小办法【转】
- webrtc公开课
- 项目管理10000 hours – 瞎扯谈系列
- 【C】 06 - 标准库概述
- JavaScript 学习—— js获取行间样式和非行间样式
- Ibatis学习总结2--SQL Map XML 配置文件
- Scrum10-22
- javascript高级编程笔记01(基本概念)
- mysql 资料总结 长期更新
- 总结iOS 8和Xcode 6的各种坑
- C# 根据IP查询地址归属地
- android手电筒开发
- 面试题-Java基础-线程部分
- linux pci 协议一
- Vim 命令图解-Gvim使用笔记-2017-5-9
- day 7-21 pymysql模块
- linux软件管理之源码包管理
- PAT 1041 考试座位号(15)(代码)
热门文章
- 关于erlang解析json数据
- springboot中tomcat找不到jsp页面【转载】
- mongodb的锁和高并发
- Android Handle,Looper,Message消息机制
- spawn类expect方法详解
- linux host=${host:-";localhost";}使用方法
- 我所认为的KVC和KVO
- CSS3学习笔记(3)—左右飞入的文字
- struts2 session登录
- codeforces 664A A. Complicated GCD(水题)