首页 > 编程语言 >油管视频《编程思维》中的题目,使用C语言编写出来,第十集,世界上的机器

油管视频《编程思维》中的题目,使用C语言编写出来,第十集,世界上的机器

时间:2024-08-17 22:59:38浏览次数:11  
标签:return 油管 第十集 路径 迷宫 C语言 int path true

题目:假设首先我拥有大量的机器人,从迷宫中心的水晶出发,其次我拥有取之不尽的线轴,这些线非常结实耐用,可以在必要时刻切断线,现在面对一个迷宫,迷宫以水晶为中心,哪里有许多条死胡同,但没有一条会绕回到起点,我只有一次机会,可以在机器人们跳入迷宫,寻找出口前,发送一条简单的指令,请问什么指令能让机器人快速穿过迷宫,打开门,并引领出一条通往水晶的道路,可以让机器人们带着线轴不断尝试,每走过哪里留下线,线也是可以切断的,请按照问题给出指令。

涉及的编程原理

1,递归:程序使用递归来探索迷宫的所有可能路径,直到找到出口。

2,回溯:如果某条路径走不通,程序会回溯到上一步并尝试其他路径。

3,二维数组:使用二维数组表示迷宫和路径。

4,条件判断:判断当前位置是否可以走。

5,路径标记:在路径上留下标记,以便记录已经走过的路。

该问题考察的是递归回溯算法的应用。我们可以用一个简单的深度优先搜索(DFS)来解决这个迷宫问题。机器人从水晶出发,沿着路径走,并在走过的路径上留下线。当机器人走到死胡同时,可以回溯并尝试其他路径。

程序编写

#include<stdio.h>

#include<stdbool.h>// 引入标准输入输出库和布尔类型库,以便使用 printf 和 bool 类型

#define N 5 //假设迷宫是5成5,定义一个宏 --->宏是指,预处理器进行文本替换的机制,特点1,编译前文本替换,2无类型,3容易修改,提高可维护性,4参数宏

int maze[N][N] = {
    {1, 0, 0, 0, 0},
    {1, 1, 0, 1, 1},
    {0, 1, 0, 0, 1},
    {0, 1, 1, 1, 1},
    {0, 0, 0, 0, 1}
};//定义一个二维数组 maze,表示迷宫结构,其中 1 表示通路,0 表示墙

int path[N][N] ={0};//定义一个二维数组 path,用于记录走过的路径,初始化为 0。

bool issafe(int x, int y){

        return(x>=0&&x<N&&y>=0&&y<N&&maze[x][y]=1);

}//定义一个函数 isSafe,判断坐标 (x, y) 是否在迷宫范围内且是通路。\

bool soveMazeUtil(int x,int y){//定义一个递归函数 solveMazeUtil,用于尝试从 (x, y) 位置寻找出口

        if (x == N - 1 && y == N - 1) {
        path[x][y] = 1;
        return true;
    }//如果当前坐标是出口 (N-1, N-1),标记路径并返回 true,表示找到了解决方案。

            if (isSafe(x, y)) {
                path[x][y] = 1;//如果当前位置安全(即可以走),在 path 中标记为 1。

                 if (solveMazeUtil(x + 1, y))
                  return true;//尝试向右移动。如果递归调用返回 true,则返回 true,表示找到了解决方案。

                  if (solveMazeUtil(x, y + 1))
                   return true;//尝试向下移动。如果递归调用返回 true,则返回 true

                   path[x][y] = 0;//如果向右和向下都无法走通,回溯,将当前位置标记为未走过(0)。

    }

                 return false;// 如果当前位置无法走通,返回 false

}

        bool solveMaze() {
            if (!solveMazeUtil(0, 0)) {
                printf("没有解决方案\n");
                return false;
    }//定义函数 solveMaze,从起点 (0, 0) 开始尝试解决迷宫。如果 solveMazeUtil 返回 false,打印 "没有解决方案"。

 for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            printf("%d ", path[i][j]);
        }
        printf("\n");
    }
    return true;
}//如果找到了解决方案,打印路径。

int main() {
    solveMaze();
    return 0;
}//主函数调用 solveMaze,开始解决迷宫问题

标签:return,油管,第十集,路径,迷宫,C语言,int,path,true
From: https://blog.csdn.net/liyunlong1111/article/details/141287333

相关文章

  • C语言程序设计-[22] 数组应用
    1、简单插入排序算法根据以上分析,代码与结果如下:#include"stdio.h"intmain(){ intcount,j,x,a[101];scanf("%d",&x);if(x<=0) return;else a[1]=x;count=1;scanf("%d",&x);while(x>0){ ......
  • 【C语言】字符函数和字符串函数
    文章目录前言一、字符分类函数二、字符转换函数三、字符串函数的分类四、strlen函数的使用五、strcpy和strncpy函数的使用1.strcpy2.strncpy六、strcat和strncat函数的使用1.strcat2.strncat七、strcmp和strncmp函数的使用1.strcmp2.strncmp八、strstr函数的使用九、s......
  • c语言计算二叉树的带权路径长度之和(WPL)
    1.WPL:树中全部叶节点的带权路径之和2.代码中所画的树为:3.求上述WPL:WPL=0*1+1*2+1*3+2*4+2*5=234.主要代码为:intwpl(Node*ROOT,inthigh){ intn=0; if(ROOT!=NULL){ n=ROOT->weight*high; n=n+wpl(ROOT->lchild,high+1); n=n+wpl(ROOT->rchild,high+1); } r......
  • 【漫谈C语言和嵌入式005】深入理解RAM与ROM:嵌入式系统存储器的核心
            在嵌入式系统设计中,存储器的选择与管理至关重要。存储器直接影响系统的性能、功耗和功能实现。在众多存储器类型中,RAM(随机存取存储器)和ROM(只读存储器)是最基本也是最重要的两类。理解它们的特点、区别和应用场景,对于设计高效、可靠的嵌入式系统至关重要。1.RA......
  • 【漫谈C语言和嵌入式006】深入解析NVRAM与Flash:嵌入式系统中的关键非易失性存储器
            在嵌入式系统设计中,非易失性存储器(Non-VolatileMemory,NVM)扮演着至关重要的角色。这类存储器能够在设备断电后保留数据,对于存储系统配置、固件、用户数据等关键信息至关重要。NVRAM(非易失性随机存取存储器)和Flash是两种常见的非易失性存储器类型,各有其独特的......
  • 【漫谈C语言和嵌入式004】深入理解RS232、RS422和RS485:嵌入式系统中的串行通信协议
            在嵌入式系统设计中,串行通信协议是设备间数据传输的重要方式。其中,RS232、RS422和RS485是三种常用的标准。这些协议不仅在工业控制、仪器仪表、网络通信等领域得到广泛应用,也在许多嵌入式系统项目中扮演着重要角色。在本文中,我们将深入探讨这三种串行通信标准......
  • 【漫谈C语言和嵌入式007】AD2S1210简介与应用:高精度旋转变压器到数字转换器的解析
            在精密运动控制和测量系统中,旋转变压器(Resolver)是一种常用的传感器,能够精确检测旋转轴的位置和速度。为了将旋转变压器的模拟信号转换为数字信号,便于微控制器或DSP进行处理,AD2S1210作为一款高性能的旋转变压器到数字转换器(RDC),为工程师提供了高精度、低延迟的......
  • linux C语言remove函数及相关函数
    讯飞星火LinuxC语言中的remove函数用于删除指定的文件或目录。其原型如下:intremove(constchar*pathname);参数:pathname:要删除的文件或目录的路径。返回值:成功时返回0,失败时返回-1。相关函数:rename:用于重命名文件或目录。intrename(constchar*old_path,......
  • 林小茶 C语言程序设计 第八章8.2/8.3答案(可直接运行)
    【8.2】定义结构体类型COMPLEX表示复数,实数部分名为rp,虚数部分名为ip,都用整形表示。编写一套函数,实现复数运算,并用函数调用这些函数。函数包括:(1)读一个复数(2)输出一个复数(3)计算这两个复数的和(4)计算着两个复数的积(5)计算一个复数的平方#include<stdio.h>structCOMPLEX{ intrp......
  • 一文搞定C语言文件常规I/O操作
    普通文件(OrdinaryFiles)普通文件,代指储存在硬盘中或外部媒体文件中的有序数据集。源文件(sourcefile),工程文件(objectfile),可执行文件(executablefile),乃至一组被处理的原始输入数据和输出结果均为普通文件。其中,源文件,工程文件等称之为程序文件,而对于输入输出的数据,则被......