Image Perimeters POJ - 1111(bfs)
时间:2019-02-11
本文章向大家介绍Image Perimeters POJ - 1111(bfs),主要包括Image Perimeters POJ - 1111(bfs)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
解题思路:本题是求含有X块的周长,即要求出在边缘的X和旁边有**.**的X,只要在结点出队的时候加以判断即可。
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
struct Node
{
int x, y;
};
queue<Node> Q;
char map[20][20];
bool mark[20][20];
int go[][2] = {1,0, -1,0, 0,1, 0,-1, 1,1, 1,-1, -1,-1, -1,1};
int BFS(int n, int m)
{
Node now;
int x, y, num = 0;
while(!Q.empty())
{
now = Q.front();
Q.pop();
//边界上的点
if(now.x == 0)
num++;
if(now.x == n-1)
num++;
if(now.y == 0)
num++;
if(now.y == m-1)
num++;
//x的上下左右四个方向是否有.
for(int i = 0; i < 4; i++)
{
x = now.x + go[i][0];
y = now.y + go[i][1];
if(x < 0 || x >= n || y < 0 || y >= m)
continue;
if(map[x][y] == '.')
num++;
}
for(int i = 0; i < 8; i++)
{
x = now.x + go[i][0];
y = now.y + go[i][1];
if(x < 0 || x >= n || y < 0 || y >= m)
continue;
if(map[x][y] == '.' || mark[x][y] == true)
continue;
Node tmp;
tmp.x = x, tmp.y = y;
mark[x][y] = true;
Q.push(tmp);
}
}
return num;
}
int main()
{
int n, m, x, y;
while(scanf("%d %d %d %d", &n, &m, &x, &y))
{
if(n == 0)
break;
for(int i = 0; i < n; i++)
scanf("%s", map[i]);
while(!Q.empty())
Q.pop();
memset(mark, 0, sizeof(mark));
if(map[x-1][y-1] == '.')
printf("0\n");
else
{
Node start;
start.x = x-1, start.y = y-1;
mark[x-1][y-1] = true;
Q.push(start);
printf("%d\n", BFS(n, m));
}
}
return 0;
}
- Linux下FTP环境部署梳理(vsftpd和proftpd)
- Silverlight如何与JS相互调用
- Docker容器学习梳理--私有仓库Registry使用
- 从插件重构看如何提升测试质量与效率
- 巧用WinRAR+Javascript解决activeX的自动安装问题
- 在网页中实现QQ的屏幕截图功能
- Activity之间传递参数
- linux下rsync和tar增量备份梳理
- 重温Delphi之:面向对象
- Android新手之旅(15) Win7下配置遇到的问题
- 重温Delphi之:如何定义一个类
- Android新手之旅(2) 新手问题
- Android新手之旅(2) 新手问题
- Android新手之旅(9) 自定义的折线图
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用IDEA写Python之pytest环境搭建及第一个程序编写
- PAT (Basic Level) Practice (中文)1026 程序运行时间
- PAT (Basic Level) Practice (中文)1091 N-自守数
- PAT (Basic Level) Practice (中文)1007 素数对猜想
- PAT (Basic Level) Practice (中文)1019 数字黑洞
- PAT (Basic Level) Practice (中文)1022 D进制的A+B
- 记一次线上商城系统高并发的优化
- 15个必须知道的JavaScript数组方法
- RedLock究竟是不是Redis分布式锁分布式环境下的银弹?
- PAT (Basic Level) Practice (中文)1023 组个最小数
- PAT (Basic Level) Practice (中文)1041 考试座位号
- PAT (Basic Level) Practice (中文)1042 字符统计
- 搭建 Apache Jmeter 分布式压测与监控,真那么难搞定?|实战干货
- PAT (Basic Level) Practice (中文)1056 组合数的和
- PAT (Basic Level) Practice (中文)1057 数零壹