第十二周项目4-迷宫问题之图深度优先遍历解法

第十一周项目五C/C++迷宫问题之图深度优先遍历解法 /* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:.cpp *完成日期:2017年11月23日 *版 本 号:v1.0 * 迷宫问题之图深度优先遍历解法 /* 设计一个程序,采用深度优先遍历算法的思路,解决迷宫问题。    (1)建立迷宫对应的图数据结构,并建立其邻接表表示。 阅读详情

问题及代码:

/* 
* Copyright (c)2016,烟台大学计算机与控制工程学院 
* All rights reserved. 
* 文件名称:CCC.cpp 
* 作    者:陈梦雪
* 完成日期:2016年11月24日 
* 版 本 号:v1.0 
*问题描述:设计一个程序,采用深度优先遍历算法的思路,解决迷宫问题。  
   (1)建立迷宫对应的图数据结构,并建立其邻接表表示。  
   (2)采用深度优先遍历的思路设计算法,输出从入口(1,1)点到出口(M,N)的所有迷宫路径。  
 
[模型建立]  
  将迷宫中的每一格作为一个顶点,相邻格子可以到达,则对应的顶点之间存在边相连。  
   例如,下面的迷宫  
这里写图片描述  
 在使用数组表示时,用0表示格子是空地,用1表示格子处是墙,对应的矩阵是: 
    int mg[M+2][N+2]=   //迷宫数组 
    { 
        {1,1,1,1,1,1}, 
        {1,0,0,0,1,1}, 
        {1,0,1,0,0,1}, 
        {1,0,0,0,1,1}, 
        {1,1,0,0,0,1}, 
        {1,1,1,1,1,1} 
    };?1 
 
于是,从(1,1)到(4,4)的迷宫问题,转化为寻找顶点(1,1)到顶点(4,4)的路径的问题。 
 
*/
代码“:

#include <stdio.h>  
#include <malloc.h>  
#define MaxSize 100  
#define M 4  
#define N 4  
//以下定义邻接表类型  
typedef struct ANode            //边的结点结构类型  
{  
    int i,j;                    //该边的终点位置(i,j)  
    struct ANode *nextarc;      //指向下一条边的指针  
} ArcNode;  
  
typedef struct Vnode            //邻接表头结点的类型  
{  
    ArcNode *firstarc;          //指向第一条边  
} VNode;  
  
typedef struct  
{  
    VNode adjlist[M+2][N+2];    //邻接表头节点数组  
} ALGraph;                      //图的邻接表类型  
  
typedef struct  
{  
    int i;                      //当前方块的行号  
    int j;                      //当前方块的列号  
} Box;  
  
typedef struct  
{  
    Box data[MaxSize];  
    int length;                 //路径长度  
} PathType;                     //定义路径类型  
  
int visited[M+2][N+2]= {0};  
int count=0;  
void CreateList(ALGraph *&G,int mg[][N+2])  
//建立迷宫数组对应的邻接表G  
{  
    int i,j,i1,j1,di;  
    ArcNode *p;  
    G=(ALGraph *)malloc(sizeof(ALGraph));  
    for (i=0; i<M+2; i++)                   //给邻接表中所有头节点的指针域置初值  
        for (j=0; j<N+2; j++)  
            G->adjlist[i][j].firstarc=NULL;  
    for (i=1; i<=M; i++)                    //检查mg中每个元素  
        for (j=1; j<=N; j++)  
            if (mg[i][j]==0)  
            {  
                di=0;  
                while (di<4)  
                {  
                    switch(di)  
                    {  
                    case 0:  
                        i1=i-1;  
                        j1=j;  
                        break;  
                    case 1:  
                        i1=i;  
                        j1=j+1;  
                        break;  
                    case 2:  
                        i1=i+1;  
                        j1=j;  
                        break;  
                    case 3:  
                        i1=i, j1=j-1;  
                        break;  
                    }  
                    if (mg[i1][j1]==0)                          //(i1,j1)为可走方块  
                    {  
                        p=(ArcNode *)malloc(sizeof(ArcNode));   //创建一个节点*p  
                        p->i=i1;  
                        p->j=j1;  
                        p->nextarc=G->adjlist[i][j].firstarc;   //将*p节点链到链表后  
                        G->adjlist[i][j].firstarc=p;  
                    }  
                    di++;  
                }  
            }  
}  
//输出邻接表G  
void DispAdj(ALGraph *G)  
{  
    int i,j;  
    ArcNode *p;  
    for (i=0; i<M+2; i++)  
        for (j=0; j<N+2; j++)  
        {  
            printf("  [%d,%d]: ",i,j);  
            p=G->adjlist[i][j].firstarc;  
            while (p!=NULL)  
            {  
                printf("(%d,%d)  ",p->i,p->j);  
                p=p->nextarc;  
            }  
            printf("\n");  
        }  
}  
void FindPath(ALGraph *G,int xi,int yi,int xe,int ye,PathType path)  
{  
    ArcNode *p;  
    visited[xi][yi]=1;                   //置已访问标记  
    path.data[path.length].i=xi;  
    path.data[path.length].j=yi;  
    path.length++;  
    if (xi==xe && yi==ye)  
    {  
        printf("  迷宫路径%d: ",++count);  
        for (int k=0; k<path.length; k++)  
            printf("(%d,%d) ",path.data[k].i,path.data[k].j);  
        printf("\n");  
    }  
    p=G->adjlist[xi][yi].firstarc;  //p指向顶点v的第一条边顶点  
    while (p!=NULL)  
    {  
        if (visited[p->i][p->j]==0) //若(p->i,p->j)方块未访问,递归访问它  
            FindPath(G,p->i,p->j,xe,ye,path);  
        p=p->nextarc;               //p指向顶点v的下一条边顶点  
    }  
    visited[xi][yi]=0;  
}  
  
int main()  
{  
    ALGraph *G;  
    int mg[M+2][N+2]=                           //迷宫数组  
    {  
        {1,1,1,1,1,1},  
        {1,0,0,0,1,1},  
        {1,0,1,0,0,1},  
        {1,0,0,0,1,1},  
        {1,1,0,0,0,1},  
        {1,1,1,1,1,1}  
    };  
    CreateList(G,mg);  
    printf("迷宫对应的邻接表:\n");  
    DispAdj(G); //输出邻接表  
    PathType path;  
    path.length=0;  
    printf("所有的迷宫路径:\n");  
    FindPath(G,1,1,M,N,path);  
    return 0;  
}  
运行结果:




 

图求解迷宫问题(对比队列) 大家好,今天我分享的是用图求解迷宫问题。我们知道用栈和递归求解出的路径并不是最简的路径,队列求解出的路径是最短路径,而图求解出的迷宫路径是怎样的呢? 目录如下可快速查阅算法描述用二维数组定义迷宫将二维数组中值为0,即空白可走的位置看成结点将所有结点的邻接矩阵求出深度优先遍历找到迷宫终点,记录并输出代码清单构建图部分构建邻接矩阵函数深度优先遍历部分输出迷宫及主函数部分输出结果总结 算法描述 1. 用二维数组定义迷宫; 2. 将二维数组中值为0,即空白可走的位置看成结点; 3. 将所有结点的邻接矩阵求出; 4. 阅读详情

相关推荐

第12周 项目5-迷宫问题之图深度优先遍历解法

/* *文件名称:1.pp *作者:崔从敏 *完成日期:2015年11月20日 *问题描述:迷宫问题之图深度优先遍历解法 */ #include #include #define MaxSize 100 #define M 4 #define N 4 //以下定义邻接表类型 typedef struct ANode //边的结点结构类型

ap_ple6223的博客 561

第12周—项目5 迷宫问题之图深度优先遍历解法

问题描述及代码:   #ifndef BTREE_H_INCLUDED #define BTREE_H_INCLUDED /* *烟台大学计控学院 *作 者:杨征 *完成日期:2015年11月22日 *问题描述:设计一个程序,采用深度优先遍历算法的思路,解决迷宫问题。   (1)建立迷宫对应的图数据结构,并建立其邻接表表示。   (2)采用深度优先遍历的思路设

yang66886的博客 618

(第十二周项目5)迷宫问题之图深度优先遍历解法

设计一个程序,采用深度优先遍历算法的思路,解决迷宫问题。   (1)建立迷宫对应的图数据结构,并建立其邻接表表示。   (2)采用深度优先遍历的思路设计算法,输出从入口(1,1)点到出口(M,N)的所有迷宫路径。 将迷宫中的每一格作为一个顶点,相邻格子可以到达,则对应的顶点之间存在边相连。 例如下面的迷宫。   在使用数组表示时,用0表示格子是空地,用1表示格子处是墙,对应的矩阵

suzucheese的博客 594

数据结构实践——迷宫问题之图深度优先遍历解法

本文是针对[数据结构基础系列(7):图]的实践项目。 【项目 - 迷宫问题之图深度优先遍历解法】     设计一个程序,采用深度优先遍历算法的思路,解决迷宫问题。     (1)建立迷宫对应的图数据结构,并建立其邻接表表示。     (2)采用深度优先遍历的思路设计算法,输出从入口(1,1)点到出口(M,N)的所有迷宫路径。  [模型建立]    将迷宫中的每一格作为一个顶点,

likaiwalkman@csdn - Code Study Area 827

第11周项目5- 迷宫问题之图深度优先遍历解法

问题及代码: /* * Copyright(c) 2017,烟台大学计算机学院 * All rights reserved. * 文件名称:cpp1. * 作 者:薛瑞琪 * 完成日期:2017 年 11 月 14 日 * 版 本 号:v1.0 * * 问题描述: 设计一个程序,采用深度优先遍历算法的思路,解决迷宫问题。   (1)建立迷宫对应的图数据结构,并建立其邻接表表示。   (

Rachel_71的博客 580

为什么你的SSE连接总断?深入对比EventSource与fetch-event-source的5大差异点

本文深入对比了原生EventSource与@microsoft/fetch-event-source库在SSE连接稳定性上的五大关键差异。重点剖析了后者在请求能力、连接控制、错误处理、数据解析及性能优化方面的优势,特别是其支持POST请求、自定义Header、精细化的重连策略与生命周期管理,为解决生产环境中SSE连接频繁断开的问题提供了专业方案。

weixin_28077113的博客 494

数据结构课程设计-用图搜索方法解决迷宫问题

邻接表中每个单链表的第一个节点存放有关顶点的信息,把这一节点看成链表的表头,其余节点存放有关边的信息,这样邻接表便由两部分组成:表头节点表和边表。在现实生活中,有许多路径的设计问题,比如铺设路面、铺设线路、铺设水管等等,面对这些问题,我们需要找到许多不同的路径,需要考虑到具体生活中的某些问题,比如地形地貌、适不适合从某个地点通过,只有合理的设计线路,才能更好的构建幸福家园,所以构建路径就显得尤为重要。(3)返回前一个访问过的且仍有末被访间的邻接点的顶点,找出该顶点的下一个未被访问的邻接点,访问该顶点。

m0_54570435的博客 2632

Qt6安装保姆级教程:从国内镜像下载到配置避坑指南(附清华/中科大源)

本文提供详细的Qt6安装与配置指南,重点介绍如何利用清华大学、中国科学技术大学等国内镜像源解决下载速度慢的问题。内容涵盖在线安装器获取、组件选择策略、环境变量配置以及常见编译与部署问题的排查方法,旨在帮助国内开发者高效、顺畅地完成Qt6开发环境搭建。

weixin_29281915的博客 634

十二、迷宫问题

十二、迷宫问题 文章目录十二、迷宫问题题目描述 题目描述 迷宫有一个入口,一个出口。一个人从入口走进迷宫,目标是找到出口。阴影部分和迷宫的外框为墙,每一步走一格,每格有四个可走的方向,探索顺序为地图方向:南(下)、东(右)、北(上)、西(左)。 输入:输入迷宫数组。第一行数据表示一个 n*n (n<=100)的迷宫;第二行开始的n行为迷宫数据。 其中:0表示路,1表示墙,起点在左上角 <1,1> 的位置,终点在右下角 <n,n> 的位置。 输出:若有解,输出从入口到出

qq_42582489的博客 2992

深入瑞芯微SDK:手把手解析Uboot、Kernel到Rootfs的镜像生成与烧录

本文深入解析瑞芯微SDK中从Uboot、Kernel到Rootfs的镜像生成与烧录全流程,揭示编译背后的技术细节。通过详细分析SDK架构、镜像生成流水线、分区表定制、Rootfs构建及烧录科学,帮助开发者从会编译进阶到懂原理,掌握系统级开发的关键技术。

weixin_29193359的博客 274

STM32 SYSTICK定时器及延时函数详解

STM32 SYSTICK及延时函数详解 SysTick定时器 SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。例如,为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心

w1050321758的博客 2368

[源码和文档分享]基于c++深度优先遍历迷宫

c++实现的深度优先遍历迷宫,迷宫大小为20*20,代码简练清楚,内涵关键注释。代码与网上都不一样。 深度优先遍历迷宫,核心思想是借助一个栈,站在一个节点上时,将它附近可以走的节点存在栈中,再按顺序找到下一个节点,重复刚才的操作,直到找到最终的终点。 实现细节: Stack函数不需要多说了,自己定义一个栈,这个栈是很关键的,像我刚才...

qq_38474647的博客 340

使用 Python 和蒙特卡罗计算未来股价走势以及历史波动率和隐含波动率

蒙特卡罗模拟等工具使投资者能够洞察一系列潜在的未来。这远离了单纯的猜测,迈向了明智的、数据驱动的决策。

探索人工智能领域 707

第十二周项目5-迷宫问题之图深度优先遍历解法

/*   Copyright (c)2016,烟台大学计算机与控制工程学院   All rights reserved.   文件名称:第十二周项目5 - 迷宫问题之图深度优先遍历解法.cpp   作    者:陈晓琳   完成日期:2016年11月18日   版 本 号:v1.0      问题描述: 设计一个程序,采用深度优先遍历算法的思路,解决迷宫问题。          

cc1562cxl的博客 428

15、目标检测模型的评估指标与YOLO算法解析

本文详细解析了目标检测模型的评估指标,包括精确率、召回率、AP、mAP及IoU的定义与作用,并深入介绍了YOLO算法的核心原理与推理流程。从网格划分、锚框引入到边界框细化与后处理,全面阐述了YOLO如何实现快速准确的目标检测。同时总结了YOLO在智能安防、自动驾驶和工业检测等领域的应用,并展望了其未来在准确性提升、多类别支持和技术融合方面的发展趋势。

work3的博客 66

Far planner 代码系列(33) 关于real_world_contour和contour_graph

我们知道far planner前部分的流程是这样子的: 对于特定的地图,如下: 我们要从surround_obs_cloud里抽取生成realworld_contour_,如下图所示: 在这时候,每个node的z坐标都是以机器人的高度定的。如图所示: 先去吃饭啦~待会回来在写 ...

博客 763

第十二周项目5——迷宫问题之图深度优先遍历解法

问题: [cpp] view plain copy   /*       * Copyright (c)2016,烟台大学计算机与控制工程学院       * All rights reserved.       * 文件名称:项目5.cpp       * 作    者:梁凯       * 完成日期:2016年11月17日      

QQ12555252014的博客 1036

【TCN回归预测】TCN时间卷积神经网络数据回归预测(多输入单输出)【含Matlab源码 2317期】

TCN时间卷积神经网络数据回归预测 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版)或下载付费资源,可赠送奶茶价版付费专栏指定代码1份; 823

第12周项目5-迷宫问题之图深度优先遍历解法

问题描述及代码: /* *烟台大学计算机与控制工程学院 *作 者:马赛 *完成日期:2016年11月17日 *问题描述:设计一个程序,采用深度优先遍历算法的思路,解决迷宫问题。   (1)建立迷宫对应的图数据结构,并建立其邻接表表示。   (2)采用深度优先遍历的思路设计算法,输出从入口(1,1)点到出口(M,N)的所有迷宫路径。 [模型建立]

Masaiaa的博客 414

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

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

第十二周项目五 迷宫问题之图深度优先遍历解法

问题及代码: /* *烟台大学计算机与控制工程学院 *作 者:孙丽玮 *完成日期:2016年11月21日 *问题描述:设计一个程序,采用深度优先遍历算法的思路,解决迷宫问题。    (1)建立迷宫对应的图数据结构,并建立其邻接表表示。    (2)采用深度优先遍历的思路设计算法,输出从入口(1,1)点到出口(M,N)的所有迷宫路径。

AFencounter的博客 460

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...

算法之迷宫解法

前几天刷抖音刷到一个迷宫解法,觉得很有意思,想把迷宫解法好好玩玩分析一下,发现里面内容和学问多着呢,是一个非常有意思的主题。除了有如何找到迷宫从入口到出口的路径的玩法,还有如何生成一个迷宫的玩法。玩迷宫之前,首先我们要弄清楚一个问题,迷宫是什么?只有当我们弄清楚了迷宫的定义,才能玩好迷宫。Prim算法是一种用于生成最小生成树的贪心算法。最小生成树是一个图中的一个子图,它包含了图中的所有顶点,并且是所有可能的生成树中总权值最小的。生成树是一个无环的连通子图。初始化。

weixin_44906791的博客 2048

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【第十二周 项目5-迷宫问题之图深度优先遍历解法】

问题及代码:/* * Copyright (c)2015级,烟台大学 计算机与控制工程学院 * All rights reserved. * 文件名称:项目5.cpp * 作 者:胡馨月 * 完成日期:2016年11月17日 * 版 本 号:v1.0 *问题描述:设计一个程序,采用深度优先遍历算法的思路,解决迷

weixin_35998801的博客 516

第十二周 【项目五 迷宫问题之图深度优先遍历解法】

/*问题及代码 *Copyright(c)2016,烟台大学计算机学院 *All right reserved. *文件名称:操作用邻接表存储的图.cpp *作者:李潇 *完成日期;2016年11月30日 *版本号;v1.0 *问题描述: 设计一个程序,采用深度优先遍历算法的思路,解决迷宫问题。   (1)建立迷宫对应的图数据结构,并建立其邻

sdlixiao6的博客 535

第12周项目5 迷宫问题之图深度优先遍历解法

问题及代码: /* 文件名称:项目5.cpp 作者:孙洁 完成日期: 2015.12.18 问题描述: 设计一个程序,采用深度优先遍历算法的思路,解决迷宫问题。   (1)建立迷宫对应的图数据结构,并建立其邻接表表示。   (2)采用深度优先遍历的思路设计算法,输出从入口(1,1)点到出口(M,N)的所有迷宫路径。 输入描述: 程序输出: 相关数据

sunjiesj的博客 623
上一篇: 第十二周项目4-利用遍历思想求解图问题
下一篇: 第十三周项目1-Prim算法的验证
小太阳陈陈
博客等级 码龄10年 5粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值