自动走迷宫(DFS)

C++ DFS算法实现走迷宫自动寻路 C++ DFS算法实现走迷宫自动寻路 深度优先搜索百度百科解释: 事实上,深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次. 运行效果: 说明: 深度优先搜索算法是在我在图的部分接触到的,后来才发现它也可以不用在图的遍历上,它是一个独立的算法,它也可以直接用在一个二维数组上。 其算法原理和实现步骤在代码中已经有了很好的体现了,这里就不再赘述。 在程序中实现了手动操控走迷宫和自动走迷 阅读详情

功能:

  • 输入一张地图,找出一条可到达终点的路径,1代表不可走,0代表可走,2代表终点。

效果图:

这里写图片描述这里写图片描述


实现原理:

  • DFS遍历。
  • 二维数组储存地图。
  • -

源代码:

因为输入数据太麻烦,附了组数据。

#include<stdio.h>
typedef struct
{
    int x;
    int y;
    int s;
    int f;
}note;

int map[999][999], book[999][999];
note queue[999];

int main()
{
    int n, i, j, head, tail, x, y, tx, ty, flag;
    int drct[4][2] = {{0, 1}, {0, -1}, {-1, 0}, {1, 0}};

    scanf("%d", &n);

    head = 1;
    tail = 1;

    x = 1;
    y = 1;
    //scanf("%d %d", &x, &y);

    queue[tail].x = x;
    queue[tail].y = y;
    queue[tail].s = 0;
    tail++;

    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= n; j++)
        {
            scanf("%d", &map[i][j]);
        }
    }




    while (head < tail)
    {
        for (i = 0; i < 4; i++)
        {
            tx = queue[head].x + drct[i][0];
            ty = queue[head].y + drct[i][1];

            if (tx < 1 || tx > n || ty < 1 || ty > n)
            {
                continue;
            }

            if (map[tx][ty] == 0 && book[tx][ty] == 0)
            {
                book[tx][ty] = 1;

                queue[tail].x = tx;
                queue[tail].y = ty;
                queue[tail].f = head;
                queue[tail].s = queue[head].s + 1;
                //printf("###%d %d\n", tail, queue[tail].f);
                tail++;
            }

            //printf("###%d %d %d %d %d %d\n", tail, queue[tail-1].f, queue[tail - 1].x, queue[tail - 1].y, tx, ty);

            if (map[tx][ty] == 2)
            {
                flag = 1;
                break;
            }
        }

        if (flag == 1)
        {
            break;
        }
        head++;
    }

    if (flag == 1)
    {

    map[tx][ty] = 3;
    for (;;)
    {
        map[queue[head].x][queue[head].y] = 3;
        //printf("%d %d  %d\n", queue[head].x, queue[head].y, i);//
        if(head == 1)
            break;
        head = queue[head].f;
        //getchar();

    }

    putchar('\n');

    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= n; j++)
        {
            if (map[i][j] == 3)
                printf("! ");
            else if (map[i][j] == 1)
                printf("# ");
            else
                printf("* ");
        }
        putchar('\n');
    }

    }

    else
        printf("NO\n");




}

/*
20
0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0
0 1 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0 1 0
0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0
0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0
1 0 1 1 0 1 0 1 1 1 1 0 1 1 0 1 0 1 1 1
0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0
0 1 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0 1 0
0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 1 0 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1
0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0
0 1 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0 1 0
0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 1 0 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1
0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0
0 1 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0 1 0
0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
1 0 1 1 1 1 0 1 1 0 1 0 1 1 1 1 0 1 1 2
*/

PS:

当时刚从啊哈算法上看到DFS,还没实现过,第一次实现写的这东西,也是感兴趣,成就感满满!

【源码+文档】机器人自动走迷宫 选取图中某一顶点$V_i$为出发点,访问并标记该顶点;以Vi为当前顶点,依次搜索$V_i$的每个邻接点$V_j$,若$V_j$未被访问过,则访问和标记邻接点$V_j$,若$V_j$已被访问过,则搜索$V_i$的下一个邻接点;以$V_j$为当前顶点,重复上一步骤),直到图中和$V_i$有路径相通的顶点都被访问为止;若图中尚有顶点未被访问过(非连通的情况下),则可任取图中的一个未被访问的顶点作为出发点,重复上述过程,直至图中所有顶点都被访问。查找每个顶点的邻接点所需时间为$O(n^2)$,n为顶点数,算法的时间 阅读详情

相关推荐

项目三:基于 A*搜索算法迷宫游戏开发

迷宫游戏是非常经典的游戏,要求随机生成一个迷宫,并求解迷宫。

weixin_51511895的博客 514

ACM -- 逃离迷宫

Problem Description   给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位置,只能走到与它相邻的4个位置中,当然在行走过程中,gloria不能走到迷宫外面去。令人头痛的是,gloria是个没什么方向感的人,因此,她在行走过程中,

翱翔天际 1845

java可视化,实现走迷宫小游戏(包含DFS自动寻找迷宫解

AlgoFrame.java 是绘制界面的核心代码,使用java的JFrame控件,在上面添加JPanel画板,在JFrame中定义渲染方法render来调用画板的 paintComponent 方法实现绘制,其中需要用到自己定义的绘制辅助类 AlgoVisHelper.java,在里面封装了绘制矩形,设置画笔颜色,停顿等方法,也定义了一些颜色,也可以不用定义该辅助类而直接在 AlgoFrame.java 中使用awt包中的各种方法直接实现,如有需要可自行下载代码。// 判断点(x,y)是否在迷宫中。

m0_60635176的博客 821

ACM:图的BFS,走迷宫

题目: 一个网格迷宫由n行m列的单元格组成,每一个单元格要么是空地(用1表示),要么是障碍物(用0来表示)。你的任务是找一条从起点到终点的最短移动序列,当中UDLR分别表示往上、下、左、右移动到相邻单元格。不论什么时候都不能在障碍格中。也不能走到迷宫之外。起点和终点保证是空地。 分析:图的BFS。 #include <iostream> #i...

aoe41606的博客 186

简单的c语言走迷宫程序.cpp

自己编程的c语言走迷宫程序。迷宫为矩形,每一格上有数字1或2或3或4,踩到1则向上走一格,踩到2则向下走一格,踩到3则向左走一格,踩到4则向右走一格。用户在第一行输入迷宫的行数、列数、走迷宫者的初始位置,在第二行输入迷宫地图,所有输入均以逗号隔开。由程序输出走出迷宫所需步数,若不能走出,则输出进入循环前所走步数与循环长度。

acm迷宫递归问题源码

acm竞赛题,涉及到递归和回溯算法,可以转成宽度优先搜索

自动走迷宫(DFS)

自动走迷宫(DFS)

m0_52124992的博客 579

Quartus II 13.1 出现 ‘‘can‘t find design entity <Filename>‘‘ 问题的解决方法

Quartus II 13.1 出现 ''can't find design entity '' 问题的解决方法

qq_62076686的博客 1万+

python DFS深度优先搜索,利用栈实现迷宫问题路径

python DFS深度优先搜索,实现迷宫最短路径

weixin_47481982的博客 1663

Multisim仿真入门:单相半波可控整流电路从搭建到波形分析(附避坑指南)

本文为电力电子技术初学者提供了一份详细的Multisim仿真指南,手把手教你从零搭建单相半波可控整流电路。通过对比纯电阻、阻感负载及加入续流二极管后的波形变化,直观理解晶闸管触发、电感续流等核心原理,并附有实用的参数设置与常见问题避坑指南,帮助你将抽象理论转化为可视化的工程实践。

weixin_29208077的博客 343

MSDN Win10镜像缺少驱动?这里有全面解决方案

针对MSDN Win10镜像缺少驱动的问题,本文提供了四种解决方案:厂商官网下载驱动程序、利用Windows更新获取驱动、使用第三方驱动更新工具以及使用集成驱动的Win10系统镜像。每种方案都有其优缺点,用户可以根据自己的需求和实际情况选择合适的方案。建议优先考虑官方渠道:官方渠道下载的驱动程序稳定可靠,是解决问题的首选方案。谨慎选择第三方工具:使用第三方工具时,务必选择信誉好、无广告捆绑的工具,并注意保护个人隐私和计算机安全。备份重要数据:在进行系统安装或更新前,务必备份重要数据以防丢失。

nntxthml的博客 1515

Python之迷宫问题的DFS和BFS

给定一个二维列表由零一组成,一代表墙,零代表路,给定起始坐标给终点坐标,若能走出迷宫求出路径坐标。

m0_73865858的博客 538

数学建模更新10(蒙特卡罗模拟)

蒙特卡罗模拟一.目录二.引例1:布丰投针实验1.投针步骤2.思路3. 历史实验者二.蒙特卡罗模拟概述1.定义2.提出3.原理4.讨论三.应用实例1.三门问题【1】问题【2】代码2.模拟排队问题【1】题目【2】引入参数【3】总结题目信息【4】过程可视化【5】一些推导公式【6】代码3.有约束的非线性规划问题【1】问题的分类【2】例子【3】推导过程【4】代码 一.目录 二.引例1:布丰投针实验 1.投针步骤 步骤: 1:取一张白纸,在上面画出许多条间距为a的平行线 2:去一根长度为l的针,随机的向纸张上投掷n次

沉晨尘宸的博客 3039

基于JavaGUI深度优先算法的自动走迷宫游戏

程序描述 使用深度优先算法实现自动走迷宫 功能描述 随机迷宫、读取本地文件迷宫 程序环境技术标签等 Java GUI Eclipse-GBK编码 JDK8 演示文件 (GIF因为跳帧问题,画面显示异常,程序正常使用,如上图一致) 联系 有任何疑问可联系 邮箱:535798943@qq.com QQ:535798943 ...

ShervenLee的博客 1615

实战指南:利用 LangGraph 的状态管理实现多轮对话的上下文隔离与持久化

本文详细介绍了如何利用LangGraph的状态管理机制,高效实现多轮对话中的上下文隔离与持久化。通过实战代码演示,从基础的消息历史管理到自定义状态扩展,再到使用SQLite进行生产级持久化,系统讲解了如何借助LangGraph的State和Checkpointer自动化处理对话记忆、用户隔离及数据存储,显著提升开发效率。

weixin_28396629的博客 488

AutoSAR配置与实践(实践篇)13.1 如何添加一个NVM BLOCK

解决办法:如下红框选项都不要自定义,否则无法自动生成对应RAM/ROM映射接口函数。传送门–AUTOSAR配置与实践—总目录传送门–AUTOSAR配置与实践—总目录。

nihaoljq2010的博客 3036

基于深度优先搜索(DFS)算法自动生成迷宫的python走迷宫游戏

本文将用pygame实现迷宫的游戏,因为迷宫的地图需要提前生成,这样每次游戏地图都是一样的。而深度优先搜索(DFS)算法可以自动计算迷宫的最优路径,那么根据这个算法就可以自动生成迷宫小游戏,这样每次打开游戏都会是新的游戏!

Henry的博客 1383

2023年全国职业院校技能大赛“信息安全管理与评估”-真题——赛题题目+答案解析

2023年全国职业院校技能大赛“信息安全管理与评估”-真题——赛题题目+答案解析

君逍遥o 5990

障碍寻路算法c语言,C++ DFS算法实现走迷宫自动寻路

C++ DFS算法实现走迷宫自动寻路,供大家参考,具体内容如下深度优先搜索百度百科解释:事实上,深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.运行效果:说明:深度优先搜索算法是在我在图的部分接触到的,后来才发现它也可以不用在图的遍历上,它是一个独立的算法,它也可以直接用在一...

weixin_31163527的博客 1248

Microsoft Bitlocker企业级管理部署方案

BitLocker是Windows 10以及更高版本中内置的磁盘加密工具,是一种可靠的数据保护机制,可以保护计算机上的敏感数据不被未经授权的人访问。BitLocker的工作原理是将整个系统卷或其他数据卷加密的同时,向某个可信软件或硬件模块请求密钥解密数据。BitLocker最大的好处在于其内置于Windows系统,所以用户无需安装其他软件或购买额外的许可证或硬件设备。本文将介绍Microsoft BitLocker企业级管理部署方案,包括:BitLocker部署前的准备工作。

xueyunshengling的博客 2073

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

试设计递归算法dfs traverse_C++ DFS算法实现走迷宫自动寻路

C++ DFS算法实现走迷宫自动寻路深度优先搜索百度百科解释:事实上,深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.----运行效果说明深度优先搜索算法是在我在图的部分接触到的,后来才发现它也可以不用在图的遍历上,它是一个独立的算法,它也可以直接用在一个二维数组上。其算法原...

weixin_39869593的博客 290

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

class03_qt迷宫游戏

要求迷宫游戏支持玩家走迷宫,和系统走迷宫路径两种模式。玩家走迷宫,通过键盘方向键控制,并在行走路径上留下痕迹;系统提示迷宫路径要求基于A*算法实现,输出玩家当前位置到迷宫出口的最优路径。设计交互友好的游戏图形界面。用数组表示迷宫,0代表路,1代表墙,开始时数组元素默认为零,点击自动走迷宫会使用深度优先进行路径遍历,找到终点,打印路径。使用QPainter绘制界面,点击生成迷宫会更新界面。

djasjkyu的博客 262

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

实现迷宫游戏的实验准备

实验内容 1、迷宫游戏是非常经典的游戏,在该题中要求随机生成一个迷宫,并求解迷宫; 2、要求查找并理解迷宫生成的算法,尝试用不同的算法来生成随机的迷宫。 3、要求游戏支持玩家走迷宫,和系统走迷宫路径两种模式。玩家走迷宫,通过键盘 方向键控制,并在行走路径上留下痕迹;系统走迷宫路径要求基于 A*算法实现,输 出走迷宫的最优路径并显示。设计交互友好的游戏图形界面。 编程语言以及开发环境的选择 和之前的项目一样,开发环境依然选用PyCharm,编程语言选用Python。 实验思路(游戏设计) 一、迷宫

lihhan的博客 473

java可视化,实现走迷宫小游戏(包含DFS自动寻找迷宫解)

AlgoFrame.java 是绘制界面的核心代码,使用java的JFrame控件,在上面添加JPanel画板,在JFrame中定义渲染方法render来调用画板的 paintComponent 方法实现绘制,其中需要用到自己定义的绘制辅助类 AlgoVisHelper.java,在里面封装了绘制矩形,设置画笔颜色,停顿等方法,也定义了一些颜色,也可以不用定义该辅助类而直接在 AlgoFrame.java 中使用awt包中的各种方法直接实现,如有需要可自行下载代码。// 判断点(x,y)是否在迷宫中。

2401_89312236的博客 921
上一篇: 数独问题(工具)
下一篇: 2048(游戏)
ACM_Fish
博客等级 码龄10年 69粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值