Найти все возможные пути через лабиринт

Я пытаюсь создать программу, которая будет проходить через случайно сгенерированный лабиринт, где 1 открыты, а 0 - стены. начиная с верхнего левого края и заканчивая правым нижним. Путь может идти вверх, вниз, влево и вправо.

В настоящее время моя программа дает мне решение, но у меня возникли проблемы с печатью нескольких путей.

Я прочитал несколько разных версий этой проблемы, но я не могу найти одну с моими параметрами.

Вот мой код, я пропустил часть, где я случайно генерирую свой лабиринт.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>

int  n, minMatrix, solIndex = 1, minLen = 10000000; //I use the latter 3 variables in order to find the shortest path, not relevant for now


bool solveMaze(int mat[n][n],int x, int y, int sol[][n], int count){

int i, j;
  if((!(x >= 0 && x <n  && y >=0 && y < n)) || mat[x][y] == 0 || sol[x][y] == 1){
    return false;
  }

  if(x == n-1 && y == n-1){
    sol[x][y] = 1;

    printf("Solution %d is:\n", solIndex);
    for(i = 0; i < n; i++)
    {
      for( j=0;j<n;j++)
      {
        printf("%d", sol[i][j]);
      }
      printf("\n");
    }

    if(count<minLen)
    {
      minLen = count;
      minMatrix = solIndex;
    }
    solIndex +=1;
    sol[x][y] = 0;
    return true;
  }

  sol[x][y] = 1;

  if(solveMaze(mat, x+1, y, sol, count+1)){
    return true;
  }

  if(solveMaze(mat, x-1, y, sol, count+1)){
    return true;
  }

  if(solveMaze(mat, x, y+1, sol, count+1)){
    return true;
  }

  if(solveMaze(mat, x, y-1, sol, count+1)){
    return true;
  }
  sol[x][y] = 0;
  return false;

}

Я пропустил часть моего основного, где я случайно генерирую свой лабиринт.

int main(){

if(!solveMaze(**mat, 0, 0, sol, 0)){
    printf("No possible paths, run program again\n");
  }
  else{
    printf("the shortest path is %d\n", minMatrix);
  }
}

Например, если у меня есть лабиринт

1100111111
1101111111
1111110110
1110011111
1101101011
1111101011
1110111101
1100111111
1110111011
1101101111

Это дает мне первый путь, который он находит

1000000000
1001100000
1111110000
1100011000
1100001000
1100001000
1100001000
1100001011
1100001011
1100001111

Хотя для этого требуется обходной путь, из-за предпочтения идти по порядку вниз, вверх, вправо и влево, это все же один путь.

В конечном счете, я не уверен, как выполнить итерацию для нескольких путей.

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

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