菜鸟DFS的第一次尝试:1103:红与黑

题目描述

小明站在一个矩形房间里,这个房间的地面铺满了地砖,每块地砖的颜色或是红色或是黑色。小明一开始站在一块黑色地砖上,并且小明从一块地砖可以向上下左右四个方向移动到其他的地砖上,但是他不能移动到红色地砖上,只能移动到黑色地砖上。
请你编程计算小明可以走到的黑色地砖最多有多少块。

输入

输入包含多组测试数据。
每组输入首先是两个正整数W和H,分别表示地砖的列行数。(1<=W,H<=20)
接下来H行,每行包含W个字符,字符含义如下:
‘.’表示黑地砖;
‘#’表示红地砖;
‘@’表示小明一开始站的位置,此位置是一块黑地砖,并且这个字符在每组输入中仅会出现一个。
当W=0,H=0时,输入结束。

输出

对于每组输入,输出小明可以走到的黑色地砖最多有多少块,包括小明最开始站的那块黑色地砖

题解:
第一次写出来的DFS,纪念一波。。。求各位大佬不要喷。。。。当然有问题请求帮忙指出来。。。谢谢。。。

#include<cstdio>
#include<iostream>
#include <algorithm>
#include <string>
#include <cstring>
using namespace std;
char a[30][30];//申请地砖数量 
int m,n,v=0;//全局变量计数器,输入地板大小 
void fhs(int x,int y) {//dfs搜索 
	a[x][y]='#';//确定格子已经走过 
	for(int x1=x-1; x1<=x+1; x1++)
			{
			if(x1>=0&&x1<m&&y>=0&&y<n&&a[x1][y]=='.') {//搜索左右 
				v++;//计数器加一 
				fhs(x1,y);//深搜这个格子旁边有无格子; 
			}
	}
		for(int y1=y-1; y1<=y+1; y1++)
		{
				if(y1>=0&&y1<n&&x>=0&&x<m&&a[x][y1]=='.') {//搜索上下 
				v++;//计数加一 
				fhs(x,y1);//深搜 
			}
		}
}
void shuru() {//输入 
	scanf("%d%d",&n,&m);
	for(int v1=0; v1<m; v1++) {//和学长看齐 
		scanf("%s",a[v1]);
	}
}
int main() {
	shuru();
	for(int t=0; t<m; t++) {
		for(int w=0; w<n; w++) {
			if(a[t][w]=='@'/*查找第一块格子*/) {
				fhs(t,w);//开始深搜 
				break;
			}
		}
	}
	printf("%d",++v);//加第一个格子 
	return 0; 
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值