北京大学信科2017机试真题之水淹七军

**总时间限制: **
1000ms
内存限制:
65536kB
描述
随着最后通牒的递出,C国的总攻也开始了,由于C国在地形上的优势,C国总司令下令采用水攻,剿灭A国最后的有生力量。
地形图是一个M*N的矩阵,矩阵上每一个点都对应着当前点的高度。C国总司令将选择若干个点进行放水。根据水往低处流的特性,水可以往四个方向的流动,被淹的地方的水面高度便和放水点的高度一样。然而,A国不是一马平川的,所以总会有地方是淹没不到的。你的任务很简单,判断一下A国司令部会不会被淹没掉。
我们将给你完整的地形图,然后给出A国司令部所在位置,给出C国将在哪几个点进行放水操作。你所需要的,就是给出A国司令部会不会被水淹。

输入
第一行:一个整数K,代表数据组数。
对于每一组数据:
第1行:符合题目描述的两个整数,M(0 < M <= 200)、N(0 < N <= 200)。
第2行至M+1行:每行N个数,以空格分开,代表这个矩阵上的各点的高度值H(0 <= H <= 1000)。
第M+2行:两个整数I(0 < I <= M)、J(0 < J <= N),代表司令部所在位置。
第M+3行:一个整数P(0 < P <= M * N),代表放水点个数。
第M+4行至M+P+4行:每行两个整数X(0 < X <= M)、Y(0 < Y <= N),代表放水点。

输出
对于每组数据,输出一行,如果被淹则输出Yes,没有则输出No。

样例输入

1
5 5
1 1 1 1 1
1 0 0 0 1
1 0 1 0 1
1 0 0 0 1
1 1 1 1 1
3 3
2
1 1
2 2

样例输出

No

提示
样例中左上角的位置是(1, 1),右上角的位置是(1, 5), 右下角的位置是(5, 5).
样例中的表示相等高度不能流到.

思路:
这里提到水往四处流,显而易见可以用DFS

代码

#include<bits/stdc++.h>
using namespace std;
#define sf(a) scanf("%d",&a)
#define sfs(a) scanf("%s",a)

const int MAXN = 202;

int n,m,len;

//DFS数组 
int vis[MAXN][MAXN];

//存放高度的数组
int a[MAXN][MAXN]; 

//司令部所在的位置
int rp,cp;
 
//放水的个数
int p; 

//上下左右 
const int dr[] = {1,0,-1,0};
const int dc[] = {0,1,0,-1};

void dfs(int row,int col){
	vis[row][col] = 1;
	for(int i = 0;i<4;++i){
		int r = row + dr[i],c = col + dc[i];
		
		if(r<=m&&r>=1&&c<=n&&c>=1&&vis[r][c]===0&&a[row][col]>a[r][c]){
			a[r][c] = a[row][col];
			dfs(r,c);
		}
	}
}
int main(){
	int K,t1,t2;
	sf(K);//输入数据组数
	
	while(K--){
		memset(vis,0,sizeof(vis));
		sf(m);
		sf(n);
		
		for(int i = 1;i<=m;++i){
			for(int j = 1;j<=n;++j){
				sf(a[i][j]);
			}
		}
		
		sf(rp);
		sf(cp);
		sf(p);
		
		while(p--){
			//输入放水点的坐标 
			sf(t1);
			sf(t2);
			dfs(t1,t2);
		}
		printf("%s\n",(vis[rp][cp]==0?"No":"Yes"));
	} 
	
	return 0;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值