小项目:迷宫

news/2024/7/20 22:46:49 标签: 深度优先, 算法

目录

  • 引言
  • 1.题目描述及思想
  • 2.代码实现
  • 3.最终结果

引言

这个迷宫的话就是去年这时候,我记得当时讲这个的时候我还是一脸懵逼,就是事后花时间能够看懂,能够理解,但是自己肯定是不能够实现的,而且觉得这个东西非常的庞大,很困难的样子,然后现在的话,我已经有足够的思维去想,并且能够完全自己一个人去实现了,然后我觉得很好,不多说,上代码。

1.题目描述及思想

给了一个迷宫,然后1代表墙,0代表路,你可以上下左右移动,然后我自己的设计就是,走过的路,能通设置为8,走不通但走过设置为4

			{1, 1, 1, 1, 1, 1, 1, 1, 1},
            {0, 0, 1, 0, 0, 0, 1, 1, 1},
            {1, 0, 1, 1, 1, 0, 1, 1, 1},
            {1, 0, 0, 1, 0, 0, 1, 1, 1},
            {1, 1, 0, 1, 1, 0, 0, 0, 1},
            {1, 0, 0, 0, 0, 0, 1, 0, 1},
            {1, 0, 1, 0, 1, 0, 0, 0, 1},
            {1, 1, 0, 0, 0, 0, 1, 0, 0},
            {1, 1, 1, 1, 1, 1, 1, 1, 1}

2.代码实现

#include<iostream>

using namespace std;

//[0,0] - [9,9]
const int N = 9;
int maze[N][N] = {
            {1, 1, 1, 1, 1, 1, 1, 1, 1},
            {0, 0, 1, 0, 0, 0, 1, 1, 1},
            {1, 0, 1, 1, 1, 0, 1, 1, 1},
            {1, 0, 0, 1, 0, 0, 1, 1, 1},
            {1, 1, 0, 1, 1, 0, 0, 0, 1},
            {1, 0, 0, 0, 0, 0, 1, 0, 1},
            {1, 0, 1, 0, 1, 0, 0, 0, 1},
            {1, 1, 0, 0, 0, 0, 1, 0, 0},
            {1, 1, 1, 1, 1, 1, 1, 1, 1}
};

bool used[N][N];
int dir[4][2] = { 0,-1,1,0,-1,0,0,1};
int endx = 7, endy = 8;

bool dfs(int x, int y)  //代表当前到达的下标
{
    if (x == endx && y == endy)  //如果已经到达终点 返回true
    {
        maze[x][y] = 8;
        used[x][y] = true;
        return true;
    }
    
    for (int i = 0; i < 4; ++i)  //四个方向不断递归
    {
        int a = x + dir[i][0];
        int b = y + dir[i][1];
        if (a < 0 || a >= N || b < 0 || b >= N) continue;  //越界换方向
        if (maze[a][b] == 1 || used[a][b]) continue;  //是墙壁 或者走过了 换方向
        used[a][b] = true;
        maze[a][b] = 8;
        if (dfs(a, b))  //如果能通返回true
        {
            maze[a][b] = 8;
            return true;
        }
        maze[a][b] = 4;  //不通设置为4,然后换个方向
    }
    return false;  //如果4个方向都不行,返回false
}

void Print()
{
    for (int i = 0; i < N; ++i)
    {
        for (int j = 0; j < N; ++j)
        {
            printf("%4d", maze[i][j]);
        }
        puts("");
    }
    puts("");
}

int main()
{
    Print();
    used[1][0] = true;
    maze[1][0] = 8;
    dfs(1, 0);
    Print();

    return 0;
}

3.最终结果

在这里插入图片描述


http://www.niftyadmin.cn/n/5262729.html

相关文章

Python进阶指南:惰性求值与Lambda表达式

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在Python的进阶学习中&#xff0c;深入理解惰性求值和Lambda表达式是提高代码灵活性和简洁性的关键步骤。本文将通过丰富的示例代码&#xff0c;详细介绍这两个概念的应用&#xff0c;帮助大家更全面地理解并熟练…

arp欺骗原理以及实现方式

我们知道了arp的作用&#xff0c;那么此时我们怎么可以用他来进行攻击呢&#xff1f;在一个局域网中&#xff0c;我们怎么实现呢&#xff1f; 原理&#xff1a; 这样B就可以做到中间人了&#xff0c;可以接受到两个主机的数据了。换句话来说&#xff0c;在同一个局域网内&…

Unity 控制刚体的移动与旋转的方法

在场景创建一个Cube,并添加刚体&#xff0c;如图&#xff1a; 编写脚本&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;[RequireComponent(typeof(Rigidbody))] public class RibRotate : MonoBehaviour {//private Vector3 mo…

提升前端效率:掌握防抖与节流

目录 概念 代码实现 区别 应用场景 概念 当涉及到处理高频事件时&#xff0c;防抖&#xff08;Debounce&#xff09;和节流&#xff08;Throttle&#xff09;成为关键的工具。它们的作用是优化函数的执行频率&#xff0c;特别是在处理浏览器事件&#xff08;如resize、scro…

13.触发器

目录 1、创建触发器 1、创建只有一个执行语句的触发器 2、创建有多个执行语句的触发器 2、查看触发器 1、通过SHOW TRIGGERS查看触发器: 2.在triggers 表中查看触发器信息 3、使用触发器 4、删除触发器 1、创建触发器 MySQL 的触发器和存储过程一样&#xff0c;都是嵌…

Leetcode—112.路径总和【简单】

2023每日刷题&#xff08;五十七&#xff09; Leetcode—112.路径总和 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* …

Signal EM的流程与分析

RedhawkTM 提供了一种在设计中分析Power EM和SignalEM的单一平台方法。Power EM通常作为Static IR和Dynamic IR分析的组成部分进行。Signal EM分析是单独进行分析的,检查设计中所有信号线和过孔的平均(单向或双向)、RMS和峰值电流密度【1】。 1 SignalEM 流程介绍 如图7…

RT-Smart 官方 aarch64 平台 musl gcc 工具链下载

前言 RT-Smart 的开发离不开 musl gcc 工具链&#xff0c;用于编译 RT-Smart 内核与用户态应用程序 RT-Smart 当前的 musl gcc 工具链未开源&#xff0c;但可以下载到 官方 最新的 musl gcc 工具链 aarch64 平台 比如 RT-Smart 最好用的 qemu 平台&#xff1a; qemu-virt64-…