Ovce题解

5. Ovce

题目ID:13015必做题100分
最新提交:Accepted100 分
历史最高:Accepted100 分

时间限制: 1000ms
空间限制: 262144kB

题目描述
HYF 家的后院养着一群羊,HYF 由于疲劳睡着了,这时一群饿狼钻进了后院开始攻击羊群,后院是由许多个方格构成的长方形区域,每个方格中用字符’.’表示空地,'#’表示栅栏,'o’表示羊,'v’表示狼,羊和狼所在的格子都是空地。
如果从一个空地A沿着水平方向或垂直方向经过一系列的空地能够到达空地 B,则称空地A和空地B属于同一个羊圈。对于能够逃离后院的空地我们认为它不属于任何一个羊圈。
当一个羊圈中羊的数量大于狼的数量时,它们会用它们的尖角顶死该羊圈中的狼,否则就将被狼吃掉,最后每个羊圈中只会剩下一种动物。
代码在下面!!!仅供参考!!!

#include<bits/stdc++.h>
using namespace std;
int dx[]={/*???*/};//自己写,不会连普及段都还有人不会写偏移量吧?
int dy[]={/*???*/};
char mp[255][255];
int vis[255][255];
int n,m,o,v;
struct node{
	int x,y;
};
void bfs(int sx,int sy){
	queue<node>que;
	que.push((node){sx,sy});//起点入队
	vis[sx][sy]=1;
	int cnto=0,cntv=0;//羊和狼的数量统计
	while(/*队列不为空*/){
		node hd=que.front();
		que.pop();
		if(mp[hd.x][hd.y]=='o')cnto++;//计数
		else if(mp[hd.x][hd.y]=='v')cntv++;
		for(int i=0;i<4;i++){
			int nx=hd.x+dx[i];
			int ny=hd.y+dy[i];
			if(/*边界条件*/)continue;
			vis[nx][ny]=1;
			que.push((node){nx,ny});
		}
	}
	if(/*羊比狼多*/)//羊的统计增加;
	else //狼比羊多,狼的统计增加;
}
int main(){
	/*输入
    */
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(/*没被访问过且不是墙*/)
				bfs(i,j);
		}
	}
	//输出剩余羊和狼的数量
    return 0;
}

想必你一定没看吧!

1 个赞

@蔡老师,来看看

感谢蔡老师~