c语言,用二维数组解决迷宫问题。来段完整的代码吧。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言,用二维数组解决迷宫问题。来段完整的代码吧。相关的知识,希望对你有一定的参考价值。

好的,以下是使用二维数组解决迷宫问题的C语言代码示例:

Copy code
#include <stdio.h>

#define ROW 6 // 迷宫行数
#define COL 6 // 迷宫列数

int maze[ROW][COL] = // 迷宫地图 1表示障碍,0表示通路
1, 1, 1, 1, 1, 1,
1, 0, 0, 1, 0, 1,
1, 0, 0, 1, 0, 1,
1, 0, 0, 0, 0, 1,
1, 0, 1, 1, 0, 1,
1, 1, 1, 1, 1, 1,
;

int result[ROW][COL]; // 存放走迷宫的结果

int dfs(int row, int col)
if (row == ROW - 1 && col == COL - 1) // 到达终点
result[row][col] = 1;
return 1;

if (maze[row][col] == 0) // 当前位置是通路
result[row][col] = 1;
if (row < ROW - 1 && dfs(row + 1, col)) // 向下走有解
return 1;

if (col < COL - 1 && dfs(row, col + 1)) // 向右走有解
return 1;

result[row][col] = 0; // 标记走过的路

return 0; // 返回无解


void print_result()
printf("走迷宫的结果:\n");
for (int i = 0; i < ROW; i++)
for (int j = 0; j < COL; j++)
printf("%d ", result[i][j]);

printf("\n");



int main()
if (dfs(0, 0)) // 从起点开始走迷宫
print_result();
else
printf("无法走出迷宫!\n");

return 0;

上述代码中,我们使用了一个二维数组 maze 来表示迷宫地图,其中 1 表示障碍,0 表示通路;另一个二维数组 result 用来存储走迷宫的结果,其中 1 表示该位置走通了, 0 表示该位置没有走通。

我们使用 dfs 函数来进行深度优先搜索,从起点 (0, 0) 开始往下、往右走,直到走到终点 (ROW-1, COL-1),如果存在通路,则将路径标记在 result 数组中,并返回 1,否则返回 0 表示无解。

最后,我们在 main 函数中调用 dfs 函数,判断是否能从起点走出迷宫,如果有解,则输出走迷宫的结果;否则,输出 "无法走出迷宫" 的提示。
参考技术A #include<stdio.h>
#define MaxSize 20
typedef struct
int i;
int j;
BOX;
typedef struct
BOX data[MaxSize];
int length;
PathType;

void display(PathType path)

static int time = 0;
int k;
printf("输出第%d条路径:\n", ++time);
for (k = 0; k<path.length; k++)
printf(" (%d %d)", path.data[k].i, path.data[k].j);
printf("\n");

void mgpath(int mg[20][20], int xi, int yi, int x2, int y2, PathType path)

int di, i, j;
if (xi == x2&&yi == y2)

path.data[path.length].i = xi;
path.data[path.length].j = yi;
path.length++;
display(path);

else
if (mg[xi][yi] == 0)

di = 0;
while (di<4)

path.data[path.length].i = xi;
path.data[path.length].j = yi;
path.length++;
switch (di)

case 0:
i = xi - 1;
j = yi;
break;
case 1:
i = xi;
j = yi + 1;
break;
case 2:
i = xi + 1;
j = yi;
break;
case 3:
i = xi;
j = yi - 1;
break;

mg[xi][yi] = -1;
mgpath(mg, i, j, x2, y2, path);
mg[xi][yi] = 0;
path.length--;
di++;




int main()

PathType path;
int i, j;
int M, N;
int x1, x2, y1, y2;
int mg[20][20];
scanf_s("%d%d", &M, &N);
for (i = 0; i<M; i++)
for (j = 0; j<N; j++)

scanf_s("%d", &mg[i][j]);

scanf_s("%d%d%d%d", &x1, &y1, &x2, &y2);
path.length = 0;

mgpath(mg, x1,y1,x2,y2,path);
return 0;
本回答被提问者和网友采纳
参考技术B 你想要具体解决什么问题,题目发给我我可以帮你写

C 语言二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )





一、二维数组



前几篇博客中 , 介绍的是指针数组 ;

指针数组 的 结构特征 是 , 数组中的每个元素 , 即每个指针变量 可以 指向不同大小的 内存块 ;

二维数组 与 指针数组 的结构不同 , 二维数组 的 内存结构 是整齐的连续的 内存块 , 每个 一维指针 指向的内存块 的大小都是相同的 , 并且这些内存块 还是连续的 ;


1、二维数组声明及初始化


二维数组声明及初始化 :

    // I. 二维数组
    char array[4][10] = "abc", "123", "258", "sfd";

2、二维数组遍历


二维数组遍历 :

    // II. 打印二维数组中的字符串
    for(i = 0; i < num; i++)
    
        // 使用数组下标形式访问
        printf("%s\\n", array[i]);
        // 使用指针访问
        //printf("%s\\n", *(array + i));
    

3、二维数组排序


二维数组排序 : 对二维数组进行排序 , 不能单纯的交换指针指向 , 二维数组是一块整体连续的内存 , 必须对内存中存储的实际数据进行整体位置交换 ;

    // III. 二维数组排序


    // 对 指针数组 进行排序 , 排序依据是 指针 指向的数据对比
    for(i = 0; i < num; i++)
    
        for(j = i + 1; j < num; j++)
        
            // 核心逻辑 : 如果 array[i] 大于 array[j]
            //          就交换两个元素
            if(strcmp(array[i], array[j]) > 0)
            
                // 交换 i, j 位置的指针指向的内存数据
                strcpy(tmp, array[i]);
                strcpy(array[i], array[j]);
                strcpy(array[j], tmp);
            
        
    




二、完整代码示例



完整代码示例 :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()

    // 循环控制变量
    int i = 0, j = 0;
    // 二维数组中的一维数组个数
    int num = 4;

    // 排序时 , 交换指针变量时的临时变量 , 存储指针指向的内存所存储的数据
    char tmp[10];

    // I. 二维数组
    char array[4][10] = "abc", "123", "258", "sfd";

    // II. 打印二维数组中的字符串
    for(i = 0; i < num; i++)
    
        // 使用数组下标形式访问
        printf("%s\\n", array[i]);
        // 使用指针访问
        //printf("%s\\n", *(array + i));
    


    // III. 二维数组排序


    // 对 指针数组 进行排序 , 排序依据是 指针 指向的数据对比
    for(i = 0; i < num; i++)
    
        for(j = i + 1; j < num; j++)
        
            // 核心逻辑 : 如果 array[i] 大于 array[j]
            //          就交换两个元素
            if(strcmp(array[i], array[j]) > 0)
            
                // 交换 i, j 位置的指针指向的内存数据
                strcpy(tmp, array[i]);
                strcpy(array[i], array[j]);
                strcpy(array[j], tmp);
            
        
    


    // IV. 打印二维数组中的字符串
    printf("\\nSort:\\n");
    for(i = 0; i < num; i++)
    
        // 使用数组下标形式访问
        printf("%s\\n", array[i]);
        // 使用指针访问
        //printf("%s\\n", *(array + i));
    


    // 命令行不要退出
    system("pause");
    return 0;


执行结果 :

以上是关于c语言,用二维数组解决迷宫问题。来段完整的代码吧。的主要内容,如果未能解决你的问题,请参考以下文章

java怎么用一个一维数组输出杨辉三角(补充完整下列代码)

C语言,怎么利用一个循环遍历一个二维数组呀?急!!!

ZZNUOJ_用C语言编写程序实现1173:矩阵边界和(指针专题)(附完整源码)

c语言中如何通过二级指针来操作二维数组

C语言数据结构实现:迷宫问题的通用解法

C语言谁能帮我写个for循环给二维数组赋值