Здравствуйте! Мне помощь. кто-нибудь будет помогать разбираться с этим? Задание такое: написать программу, которая по исход

Здравствуйте!! Мне очень срочно нужно помощь.. кто-нибудь будет помогать разбираться с этим?)) Задание такое: Нужно написать программу ,которая по исходным данным m и n строит прямоугольный лабиринт mXn. Предусмотреть, чтобы программа при каждом обращении к ней порождала разные лабиринты. Лабиринт должен иметь единственное решение, и, чтобы получившийся лабиринт был интересным, все ячейки должны быть соединены с основным путем, дающим решение. Программу надо написать через С++..Заранее спасибо!!

  • #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    const int size = 20;
    const int fullfill = 100;
    const int wallshort= 50;
    char m[size+1][size+1];
    int r[2][size/2*size/2];
    int h;
    void initrandom ()
    {
     int j=0;
     for (int y=2; y<size; y+=2)
      for (int x=2; x< size; x+=2)
         {
          r[0][j] = x; r[1][j] = y; j++;
         }
     h=j-1;
    }
    int getrandom(int &x, int &y)
    {
     int i = random (h);
     x = r[0][i]; y = r[1][i];
     r[0][i] = r[0][h]; r[1][i] = r[1][h];
     return h—;
    }
    void view()
    {
     for (int y=0; y<=size; y++)
      for (int x=0; x<=size; x++)
       {
        gotoxy (x*2+1,y+1);
        if (m[y][x]==0) cprintf («..»);
        if (m[y][x]==1) cprintf («__»);
      }
    }int main(void)
    {
      printf («nnnnnnnnnnnnnnnnnnnnnnn»);  printf («Labirint generator»);  for (int c = 0; c < size*size; c++) ((char *)m)[c] = 0;
      for (int i = 0; i <= size; i++)
          {
           m[0][i] = 1; m[size][i] = 1;
           m[i][0] = 1; m[i][size] = 1;
          }
      view ();
      initrandom();
      int startx, starty;
      while (getrandom (startx, starty))
      {
       if (m[starty][startx]==1) continue;
       if (random (100) > fullfill) continue;
       int sx=0,sy=0;
       do
       {
         sx=random (3)-1;
         sy=random (3)-1;
       } while (sx==0 && sy==0 || sx!=0 && sy!=0);   while (m[starty][startx]==0)
       {
        if (random (100) > wallshort)
           {m[starty][startx] = 1; break;}
        m[starty][startx] = 1;
        startx +=sx; starty+=sy;
        m[starty][startx] = 1;
        startx +=sx; starty+=sy;
       }
      }
      view();
      return 0;
    }