Подсчет комнат, зная, где стены

Этот вопрос относится к коду для C ++ Builder 6. Баунти заинтересован в стандартном алгоритме C ++ для решения проблемы с учетом стандартизированного ввода (см.этот для дополнительной информации.)

TXT-файл, который также представляет данные, которые я имею в массиве:

1101 0110 1101 0110 1100 0101 0110
1110 1001 0110 1011 1010 1111 1010
1000 0101 0011 1110 1011 1110 1010
1011 1101 0101 0001 0101 0011 1011

Объяснение текста:
Числа из txt файла представляют собой 4-битное представление стен комнаты, а установленный бит представляет стену. Стенные биты расположены по часовой стрелке, начиная с самого значительного бита, являющегося западной стеной. Например,1101 представляет комнату, где:

Установленный бит в наиболее значимой позиции указывает на стену на западУстановленный бит в следующей наиболее значимой позиции указывает на стену к северуНеустановленный бит указывает на отсутствие стены на востокеУстановленный бит в наименее значимой позиции указывает на стену на юг

Дано:

Наружные стены комнат всегда будут иметь стенуВнутренние стены всегда будут выражены в обеих комнатах (в примере, так как комната в (1, 1)1101 он содержит стену на юг, комната в (1, 2)1110 должен содержать стену на северТам никогда не будет больше, чемnumeric_limits<int>::max() номера

I попросили опубликовать мой код так вот оно:
Я пытался решить эту проблему, но я получаю EAAccessviolation может кто-нибудь сказать мне, что я делаю неправильно?

  int rn=0,z=0, global=0,coord[15],c[411],b1[411];

void peruse ( int i, int j,int* bb)
{
bool top=false,bottom=false,right=false,left=false;
//truth checks

if (bb[i*m+j]<1000)  left=true;

if (bb[i*m+j]<100)   top=true; else if (bb[i*m+j]-1000<100)   top=true;

if (bb[i*m+j]<10)    right=true; else
if ( (bb[i*m+j]-100<10) || (bb[i*m+j]-1000<10) || (bb[i*m+j]-100<10) ) right=true;

if (bb[i*m+j]<1)   bottom=true; else
if ( (bb[i*m+j]-10<1) || (bb[i*m+j]-100<1) || (bb[i*m+j]-1000<1) ||(bb[i*m+j]-100<1))
bottom=true;
//marc

if  (left)
{
c[i*m+j]=c[i*m+j]+1000; // EAaccessViolation i dont know why.....
peruse(i,j-1,c);
}
if (top)
{
c[i*m+j]=c[i*m+j]+100;
peruse(i-1,j,c);
}
if (right)
{
c[i*m+j]=c[i*m+j]+10;
peruse(i,j+1,c);
}
if (bottom)
{
c[i*m+j]=c[i*m+j]+1;
peruse(i+1,i,c);
}
 if ( !(left) && !(top) && !(right) && !(bottom) )
 {
  bb[411]++;



 }
}


void __fastcall TForm1::Button7Click(TObject *Sender)
{
b1[411]=0;

 for(int i=0;i<n;i++)
    for (int j=0;j<m;j++)
          {
           b1[i*m+j]=b[i][j];
           c[i*m+j]=b[i][j];
          }
  peruse (1,1,b1);

 ShowMessage("Nr. "+IntToStr(b1[411]) );
}

Ответы на вопрос(5)

Ваш ответ на вопрос