HDU 4414 Finding crosses(搜索)

题目链接:HDU 4414 Finding crosses


【题目大意】

给你一张n*n的图,由o #这两个元素组成,让我们找其中有多少十字架。 十字架由#构成

十字架的纵向长度等于横向长度 , 且这个长度要为大于等于3的奇数。

构成十字架的#周围不能有多余的#

HDU 4414 Finding crosses(搜索)_第1张图片


如图1满足条件, 图二不满足,图三不满足,图四不满足, 这三个不满足的条件都是有了多余的#;


【解法】

对每个有#元素的位置bfs , 一层一层的扩展,每次扩展检测周围是否有多余的#,没有就继续扩展, 有就返回0,不能扩展了就判断是否为合格的十字架。


【源代码】

#include 
#include 
using namespace std;
char map[55][55];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
	int n;
bool bfs(int a,int b){
	int ans = 0;
	int cnt = 0;
	for(int i=1;i<=25;i++){
		int step = 0;
		for(int j=0;j<4;j++){
			int nx = a+dx[j]*i; //*i, 实现一层层扩展
			int ny = b+dy[j]*i;
			if(nx<0 || nx>=n|| ny<0|| ny>=n) continue;
			if(map[nx][ny] == '#'){
				step++;
				if(j==2 || j==3){
					if(ny>0 && map[nx][ny-1] == '#' || ny0 && map[nx-1][ny] == '#' || nx0)
			return true;
	else
			return false;
}
int main(){

	while(scanf("%d",&n)!=EOF && n){
		for(int i=0;i


转载于:https://www.cnblogs.com/chaiwenjun000/p/5321164.html

你可能感兴趣的:(HDU 4414 Finding crosses(搜索))