深搜问题:瓷砖

时间限制:1秒        内存限制:128M

题目描述

在一个wxh的矩形广场上,每一块1x1的地面都铺设了红色和黑色的瓷砖。小谢同学站在某一块黑色瓷砖上,他可以从此处出发,移动到上下左右四个相邻的且是黑色的瓷砖上 现在他想知道,通过重复上述移动所能经过的黑色瓷砖数

输入描述

第一行为两个数h和w,2<=w,h<=50,之间用一个空格隔开 

以下为一个w行h列的二维字符矩阵,每个字符为“.”,“#”, ”@”,分别表示该位置为黑色的瓷砖、红色的瓷砖,已经小Y的初始位置

输出描述

输出一行一个整数,表示小谢从初始位置出发可以到达的瓷砖数

样例

输入

30 17
##...#...#.#.#..####.#........
.#.#...##....##.....###.#.##..
#..#..#...#......##...#....#.#
........#.#####...##.......##.
.........#.#.####.#........##.
........#.#.###...........#.##
#...####.#..#....##....###.#..
...####.#.#..####.......#....#
.#..#.@#.#.....#...#...#.#...#
##..#..#.......###..#....#....
.##....###...##..##..##..##..#
..#.#.#.#.#...#.......####..#.
.........###.#...#.#..#..#.###
.....##...#.#...##..#####..#..
...#.#.....##.#.......##..#...
.#......##....#...#.....#...#.
####..####.#..#.............##

输出

292

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;
int n,m,cnt,sx,sy;
const int N=1e2+10;
char a[N][N];
int vis[N][N];
int dx[]= {-1,1,0,0};
int dy[]= {0,0,-1,1};
void dfs(int x,int y ) {
	vis[x][y]=1;
	cnt++;
	for(int i=0; i<4; i++) {
		int fx=x+dx[i];
		int fy=y+dy[i];
		if(fx<1||fx>m||fy<1||fy>n) continue;
		if(!vis[fx][fy]&&a[fx][fy]=='.') {
			dfs(fx,fy);
		}
	}
}
int main() {
	memset(a,'0',sizeof(a));
	cin>>n>>m;
	for(int i=1; i<=m; i++) {
		for(int j=1; j<=n; j++) {
			cin>>a[i][j];
			if(a[i][j]=='@'){
				sx=i;
				sy=j;
			}
		}
	}
	dfs(sx,sy);
	cout<<cnt;
	return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值