swjtu作业三(第三题)

该文章是一个关于图论和算法的问题,描述了一个人在黑白方格矩形区域中,从特定黑色方格出发,只能沿着黑色方格移动的情况。给定矩形的尺寸和初始位置,利用深度优先搜索(DFS)算法计算出最多能走过的黑色方格数量。给出了一段C++代码实现此功能,并提供了一个测试用例及其结果。
摘要由CSDN通过智能技术生成

题目描述:

某个人站在一个由黑白方格构成的矩形区域中,他从某个黑色方格出发,向上下左右四个方向移动,每次只能从一个黑色方格移动到另一个黑色方格,问他最多能够走多少个黑色方格。

输入要求:

输入数据的第一行包含两个整数 l w,表示矩形区域的宽度(列数)和高度(行数),也就是水平和垂直方向上方格的数量。其后的 w 行,每一行有 l 个字符,由“.”,”#”和“@”符号构成,分别表示黑色方格,白色方格和人起始所在的黑色方格。

输出要求:

输出一个整数,表示他最多能走的黑色方格的数量,占一行。

测试用例:

11 9

. # . . . . . . . . .

. # . # # # # # # # .

. # . # . . . . . # .

. # . # . # # # . # .

. # . # . . @ # . # .

. # . # # # # # . # .

. # . . . . . . . # .

. # # # # # # # # # .

. . . . . . . . . . .

结果是59

代码如下

#include<iostream>
using namespace std;
char a[100][100];
int dx[4] = { 1,-1,0,0 };  
int dy[4] = { 0,0,1,-1 };
int l, w;
int sum = 0;
void dfs(int p, int q) {
	a[p][q] = '#';   
	sum++;
	int nx, ny;
	for (int i = 0; i < 4; i++) {
		nx = p + dx[i];
		ny = q + dy[i];
		if (a[nx][ny] == '.' && p >= 0 && q >= 0 && nx < w && ny < l) 
			dfs(nx, ny);  
	}
	return;
}
int main() {
	cin >> l >> w;
		for (int i = 0; i < w; i++) 
			for (int j = 0; j < l; j++) 
				cin >> a[i][j];	
		
		for (int i = 0; i < w; i++) 
			for (int j = 0; j < l; j++) 
				if (a[i][j] == '@') 
					dfs(i, j);					
			cout << sum;
	return 0;
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值