1250:The Castle

  • 咳咳,我又回来啦
  • 一本通链接在此
  • 怎么也是我打了半天还改了半天自己的奇葩bug的代码
  • 注释超详细,所以我还是给它个面子放上来吧

广搜代码如下

#include<bits/stdc++.h>
using namespace std;
int m,n,maxa,maxb=1,h,t,p;//注意maxb初始值是1,因为可能每个格子都是一个房间 
int b[3000][2],d[3000]={0},dx[4]={0,-1,0,1},dy[4]={-1,0,1,0},f[60][60]; 
bool a[51][51][4]; 
void bfs(){
	while(h<t){
		h++;
		int x=b[h][0],y=b[h][1]; 
		for(int i=0;i<4;i++){
			int xx=x+dx[i],yy=y+dy[i];
			if(!a[x][y][i]&&!f[xx][yy]){//没墙而且没走过(最外侧都有墙所以不用处理) 
				f[xx][yy]=f[x][y];d[f[x][y]]++;//做标记且计算房间大小
				maxb=max(maxb,d[f[x][y]]);//比较更新 
				t++;b[t][0]=xx,b[t][1]=yy;//入栈 
			} 
		} 
	}
}
int main()
{
	cin>>m>>n;
	for(int i=1;i<=m;i++)
		for(int j=1;j<=n;j++){
			cin>>p;
			for(int k=1;k<=4;k++){//挨个处理(为了少写几行我容易吗) 
				if(p&1) a[i][j][k-1]=1;
				p>>=1;
			}
		}
	for(int i=1;i<=m;i++)
		for(int j=1;j<=n;j++)
			if(!f[i][j]){
				t++;b[t][0]=i,b[t][1]=j;//入栈 
				f[i][j]=++maxa;//累计房间数,顺便进行标记 
				d[maxa]=1;//准备累计房间大小 
				bfs();
			}
	cout<<maxa<<endl<<maxb<<endl;//终于能输出了,撒花! 
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值