просто, понимаешь, у меня есть решение на дельфи, а перевести его в с++ я не могу, работу с файлами вообще не понимаю, да и сам с++ мне не близок. + все-таки мне кажется, что процедура ввода лабиринта не соответствует поставленной задаче... 
  
   Код
unit MyLabirint;
interface
  uses SysUtils, MyConsoleIO;
  const MaxN=20;
        MaxM=20;
  var WayExists: boolean;
  type Maze=array [0..MaxN+1, 0..MaxM+1] of byte;
       Point=record
               x,y:byte;
             end;
       Way=array [1..MaxN*MaxM] of Point;
  procedure InputLabirint(var A: Maze;N,M :integer); overload;
  procedure InputLabirint(s: string;var A: Maze;N,M :integer); overload;
  procedure PrintLabirint(const A: Maze;N,M :integer);
  procedure PrintWay(const w: Way;c: integer);
  procedure Search(A: Maze;F: Point;x,y: byte;w: Way;c: integer;var optw: Way;var optc: integer);
  procedure AddBarier(N,M :integer;var A: Maze);
  function LineCount(s: string):integer;
  function ColumnCount(s: string):integer;
implementation
  // ввод лабиринта с клавиатуры
  procedure InputLabirint(var A: Maze;N,M :integer); overload;
  var i,j: integer;
  begin
    Writeln;
    for i:=1 to N do
    begin
      for j:=1 to M do
      begin
        Read(A[i,j]);
      end;
      Writeln;
    end;
    WayExists:=false;
  end;
  // ввод лабиринта из текстового файла
  procedure InputLabirint(s: string;var A: Maze;N,M :integer); overload;
  var i,j: integer;
      f: text;
  begin
    assign(f,s);
    reset(f);
    for i:=1 to N do
    begin
      for j:=1 to M do
          Read(f,A[i,j]);
      writeln;
    end;
    closefile(f);
    WayExists:=false;
  end;
  // вывод лабиринта
  procedure PrintLabirint(const A: Maze;N,M :integer);
  var i,j: integer;
  begin
    Writeln;
    for i:=0 to N+1 do
    begin
      for j:=0 to M+1 do
        Write(A[i,j]:4);
      Writeln;
    end;
    Writeln;
  end;
  // вывод пути
  procedure PrintWay(const w: Way;c: integer);
  var i: integer;
  begin
    Writeln;
    for i:=1 to c-1 do
      Write(w[i].x,', ',w[i].y,' -> ');
    Write(w[c].x,', ',w[c].y);
    Writeln;
  end;
  // поиск решения
  procedure Search(A: Maze;F: Point;x,y: byte;w: Way;c: integer;var optw: Way;var optc: integer);
  begin
    c:=c+1;
    w[c].x:=x;
    w[c].y:=y;
    A[x,y]:=2;                                    //запись варианта
    if (x=F.x) and (y=F.y) then                   // путь найден
    begin
      WayExists:=true;
      Writeln(StringWinToDos('Ïóòü åñòü!!!'));
      PrintWay(w,c);
      if c<optc then
      begin
        optc:=c;
        optw:=w;
      end;
      Readln;
      // Halt;    //для нахождения одного решения
    end
    else
    begin
      if A[x,y+1]=0 then Search(A,F,x,y+1,w,c,optw,optc);           // if  вариант подходит then
      if A[x,y-1]=0 then Search(A,F,x,y-1,w,c,optw,optc);           //    рекурсивный вызов
      if A[x-1,y]=0 then Search(A,F,x-1,y,w,c,optw,optc);
      if A[x+1,y]=0 then Search(A,F,x+1,y,w,c,optw,optc);
    end;
    A[x,y]:=0;                                    // стирание варианта
    c:=c-1;
  end;
  // добавление барьера
  procedure AddBarier(N,M :integer;var A: Maze);
  var i,j: integer;
  begin
    for i:=0 to N+1 do
      for j:=0 to M+1 do
       if (i=0)or(i=N+1)or(j=0)or(j=M+1) then A[i,j]:=1;
  end;
  // определение количества строк в текстовом файле (=высота лабиринта)
 
  function LineCount(s: string):integer;
  var f: text;
  begin
    assignfile(f,s);
    Result:=0;
    reset(f);
    while not eof(f) do
    begin
      readln(f);
      inc(Result);
    end;
    closefile(f);
  end;
  //определение количества столбцов из "0" и "1" в текстовом файле (=ширина лабиринта)
  function ColumnCount(s: string):integer;
  var f: text;
  begin
    assignfile(f,s);
    Result:=0;
    reset(f);
    while not seekeoln(f) do
    begin
      readln(f);
      inc(Result);
    end;
    closefile(f);
  end;
end.