- 咳咳,我又回来啦
- 一本通链接在此
- 怎么也是我打了半天还改了半天自己的奇葩bug的代码
- 注释超详细,所以我还是给它个面子放上来吧
广搜代码如下
#include<bits/stdc++.h>
using namespace std;
int m,n,maxa,maxb=1,h,t,p;
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;
}