C 大矩阵问题

C 大矩阵问题,c,maze,C,Maze,我的任务是在迷宫10X10中找到最短路径。 我将大小定义为N,并在开始时尝试使用大小3X3和4X4进行调试,以逐步进行检查,程序运行良好。 在此之后,我尝试放大尺寸,然后程序向我显示该尺寸,并显示为堆叠且未完成程序(最后,我必须打印最短路径的值): 这是我的密码。我不知道问题出在哪里。我不知道为什么3X3工作得很好而不是更大 #include <stdio.h> #define N 7 #define UP 12 #define DOWN 20 #define

我的任务是在迷宫10X10中找到最短路径。 我将大小定义为N,并在开始时尝试使用大小3X3和4X4进行调试,以逐步进行检查,程序运行良好。 在此之后,我尝试放大尺寸,然后程序向我显示该尺寸,并显示为堆叠且未完成程序(最后,我必须打印最短路径的值):

这是我的密码。我不知道问题出在哪里。我不知道为什么3X3工作得很好而不是更大

         #include <stdio.h>

#define N 7
#define UP 12
#define DOWN 20
#define RIGHT 30
#define LEFT 40

void paragraph_4 ();
int get2Dmatrix (int arr[N][N],int i,int j);
int maze (int maze_arr[N][N],int counter,int i,int j,int direction);
int min(int y1,int y2,int y3,int y4);

 int main ()
 {
    // int arr[10][10]={0};
    // get2Dmatrix (arr,0,0));
     paragraph_4();
     return 0;
 }

 void paragraph_4 ()
 {
     int maze_matrix[N][N];
     printf("Please enter information for 10 by 10 matrix\n");
     get2Dmatrix(maze_matrix,0,0);
     int min_length=maze (maze_matrix,0,0,0,DOWN);

     if (min_length==(N*N)+1)
         printf("No path\n");
     else
         printf("The shortest path length is %d\n",min_length-1);
 }

int get2Dmatrix (int arr[N][N],int i,int j)
{
    if (j==N)
    {
        i++;
        j=0;
    }
    if (i==N)
        return arr [N][N];

       scanf ("%d",&arr[i][j]);
        get2Dmatrix (arr,i,j+1);

    if (i==0 && j==0)
        return arr [N][N];

}

int maze (int maze_arr[N][N],int counter,int i,int j,int direction)
{
    int x1=(N*N)+1,x2=(N*N)+1,x3=(N*N)+1,x4=(N*N)+1;// initialization to impossible steps.
    counter++;

    if (i==(N-1) && j==(N-1))// stop recursion conditions
            return counter;

    if (counter==(N*N)+1)
        return ((N*N)+1);

    if ((i<(N-1)) && (direction!=UP) && (maze_arr[i+1][j]==1))// go down
        x1=maze(maze_arr,counter,i+1,j,DOWN);

    if ((i>0) && (direction!=DOWN) && (maze_arr[i-1][j]==1))//go up
        x2=maze(maze_arr,counter,i-1,j,UP);

    if ((j<(N-1)) && (direction != LEFT) && (maze_arr[i][j+1]==1))//go right
        x3=maze(maze_arr,counter,i,j+1,RIGHT);

    if ((j>0) && (direction!= RIGHT) && (maze_arr[i][j-1]==1))//go left
        x4=maze(maze_arr,counter,i,j-1,LEFT);

    return min(x1,x2,x3,x4);//send 4 numbers for function and return the

}

// Get 4 numbers and return the lowest value.
int min(int y1,int y2,int y3,int y4)
{
    if(y1==y2 && y2==y3 && y3==y4)
            return y1;
    else if (y1<=y2 && y1<=y3 && y1<=y4)
        return y1;
    else if (y2<=y1 && y2<=y3 && y2<=y4)
        return y2;
    else if (y3<=y1 && y3<=y2 && y3<=y4)
        return y3;
    else if (y4<=y1 && y4<=y2 && y4<=y3)
        return y4;
}
#包括
#定义n7
#定义12
#下定义20
#定义权利30
#定义左40
第4()款无效;
int get2Dmatrix(int arr[N][N],int i,int j);
int-maze(int-maze_arr[N][N],int-counter,int-i,int-j,int-direction);
最小整数(整数y1、整数y2、整数y3、整数y4);
int main()
{
//int arr[10][10]={0};
//get2Dmatrix(arr,0,0));
第_4()段;
返回0;
}
无效第4段()
{
int_矩阵[N][N];
printf(“请输入10×10矩阵的信息\n”);
get2Dmatrix(maze_矩阵,0,0);
int min_length=迷宫(迷宫矩阵,0,0,0,向下);
如果(最小长度==(N*N)+1)
printf(“无路径”);
其他的
printf(“最短路径长度为%d\n”,最小长度为-1);
}
int get2Dmatrix(int arr[N][N],int i,int j)
{
如果(j==N)
{
i++;
j=0;
}
如果(i==N)
返回arr[N][N];
scanf(“%d”、&arr[i][j]);
get2Dmatrix(arr,i,j+1);
如果(i==0&&j==0)
返回arr[N][N];
}
整数迷宫(整数迷宫arr[N][N],整数计数器,整数i,整数j,整数方向)
{
int-x1=(N*N)+1,x2=(N*N)+1,x3=(N*N)+1,x4=(N*N)+1;//初始化到不可能的步骤。
计数器++;
if(i==(N-1)&&j==(N-1))//停止递归条件
返回计数器;
如果(计数器==(N*N)+1)
返回((N*N)+1);
如果((i0)&(方向!=向下)&&(迷宫arr[i-1][j]==1))//向上
x2=迷宫(迷宫,计数器,i-1,j,向上);
如果((j0)&(方向!=右)&&(迷宫arr[i][j-1]==1))//向左走
x4=迷宫(迷宫阵列,计数器,i,j-1,左侧);
return min(x1,x2,x3,x4);//为函数发送4个数字并返回
}
//获取4个数字并返回最低值。
最小整数(整数y1、整数y2、整数y3、整数y4)
{
如果(y1==y2&&y2==y3&&y3==y4)
返回y1;
否则,如果(y1
  • 访问外部数组大小。另外:由于未使用
    get2Dmatrix()
    的返回值,只需返回即可

    int get2Dmatrix (int arr[N][N],int i,int j) {
      ...
      if (i==N) return arr [N][N];  // access arr [N][N] is UB
    }
    
    void get2Dmatrix (int arr[N][N],int i,int j) {
      ...
      if (i==N) return;
    }
    
  • 当然,
    #定义N7
    应该是
    #定义N10

  • 堆栈大小可能不够,但我不这么认为。请暂时尝试
    static int maze_matrix[N][N];
    将其移出堆栈


  • 次要:
    if(y1==y2&&y2==y3&&y3==y4)返回y1;
    是不需要的,因为这种情况在下一个
    if(y1)中被捕获。我们不能被强制访问不受信任的链接。在问题中粘贴代码。我忘了说:我必须使用无循环的递归。
    
    if (scanf ("%d",&arr[i][j]) != 1) Alert_BadInput();
    
    int min4(int y1,int y2,int y3,int y4) {
       return min2((y1 <= y2) ? y1 : y2, (y3 <= y4) ? y3 : y4);
    }
    int min2(int y1,int y2) {
       return (y1 <= y2) ? y1 : y2;
    }
    
    // printf("Please enter information for 10 by 10 matrix\n");
    printf("Please enter information for %d by %d matrix\n", N, N);