请问该题代码哪里错了?
题目:
OpenJudge - 1817:城堡问题
http://noi.openjudge.cn/ch0205/1817/
图1是一个城堡的地形图。请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。城堡被分割成m×n(m≤50,n≤50)个方块,每个方块可以有0~4面墙。
输入
程序从标准输入设备读入数据。第1、2行每行1个整数,分别是南北向、东西向的方块数。在接下来的输入行里,每个方块用一个数字(0≤p≤50)描述。用一个数字表示方块周围的墙,1表示西墙,2表示北墙,4表示东墙,8表示南墙。每个方块用代表其周围墙的数字之和表示。城堡的内墙被计算两次,方块(1,1)的南墙同时也是方块(2,1)的北墙。输入的数据保证城堡至少有两个房间。
输出
输出2行,每行一个数,表示城堡的房间数、城堡中最大房间所包括的方块数。结果显示在标准输出设备上。
我的代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,a[55][55],t,s,v[55][55],msn=0,bit[4]={2,8,1,4};
void dfs(int x,int y)
{
int i,dx[4]={-1,1,0,0},dy[4]={0,0,-1,1},tx,ty;
for(i=0;i<=3;i++)
{
tx=x+dx[i];
ty=y+dy[i];
if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&(a[tx][ty]&bit[i])==0&&v[tx][ty]==0)
{
s++;
v[tx][ty]=1;
dfs(tx,ty);
}
}
}
int main()
{
int i,j;
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>a[i][j];
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(v[i][j]==0)
{
t++;
s=1;
v[i][j]=1;
dfs(i,j);
if(s>msn)
msn=s;
}
}
cout<<t<<endl<<msn;
}