第十二周项目5-迷宫问题之图深度优先遍历解法
问题:
/*
* Copyright(c)2015,烟台大学计算机学院
* All right reserved.
* 文件名称:项目5.cbp
* 作者:李艺
* 完成日期;2015年11月20日
* 版本号;v1.0
* 问题描述: 设计一个程序,采用深度优先遍历算法的思路,解决迷宫问题。 (1)建立迷宫对应的图数据结构,并建立其邻接表表示。 (2)采用深度优先遍历的思路设计算法,输出从入口(1,1)点到出口(M,N)的所有迷宫路径。 * 输入描述:迷宫的邻接矩阵
* 程序输出:邻接表表示迷宫,走出迷宫所有的路径
*/
代码:
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
#define M 8
#define N 8
//以下定义邻接表类型
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)); //创建一个节点*pp->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,1,1,1},{1,0,0,1,0,0,0,1,0,1},{1,0,0,1,0,0,0,1,0,1},{1,0,0,0,0,1,1,0,0,1},{1,0,1,1,1,0,0,0,0,1},{1,0,0,0,1,0,0,0,0,1},{1,0,1,0,0,0,2,0,0,1},{1,0,1,1,0,1,1,1,0,1},{1,1,0,0,0,0,0,0,0,1},{1,1,1,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;
}
部分运行结果:
知识点总结:
图的应用。
第十二周项目5-迷宫问题之图深度优先遍历解法相关推荐
- 第十二周项目五-----迷宫问题之图深度优先遍历解法
烟台大学计算机与控制工程学院 作者:孙潇 时间:2015年12月15日 问题描述:[项目 - 迷宫问题之图深度优先遍历解法] 设计一个程序,采用深度优先遍历算法的思路,解决迷宫问题. ( ...
- 第11周【项目5 - 迷宫问题之图深度优先遍历解法】
/**Copyright(c)2017,烟台大学计算机学院*All right reserved.*文件名称:20171207.cpp*作者:李小同*完成日期:2017年12月07日*版本号:v1.1 ...
- 第十二周项目4-利用遍历思想求解图问题(6-7)
/* Copyright (c)2015,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第十二周项目4-利用遍历思想求解图问题(6-7) 作 者:佟兴锋 完成日期: ...
- 第十二周项目4-点、圆的关系
(1)先建立一个Point(点)类,包含数据成员x,y(坐标点): (2)以Point为基类,派生出一个Circle(圆)类,增加数据成员(半径),基类的成员表示圆心: (3)编写上述两类中的构造.析 ...
- 第十二周项目二-Time类中的运算符重载
/**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月24日*版 本 号:v1. ...
- 第十二周项目一-实现复数类中的运算符重载(3)
/**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月15日*版 本 号:v1. ...
- 第十二周项目一----图基本算法库
/*烟台大学计算机与控制工程学院 作者:孙潇 时间:2015年11月13日 问题描述:定义图的邻接矩阵和邻接表存储结构,实现其基本运算,并完成测试. 输入描述:无 输出描述:若干数据 */ 头文件: ...
- 第十二周项目二----操作用邻接表存储的图
/*烟台大学计算机与控制工程学院 时间2015年12月14日 作者:孙潇 问题描述:假设图G采用邻接表存储,分别设计实现以下要求的算法: (1)输出出图G中每个顶点的出度: (2)求出图G中出度最大的 ...
- 第十二周项目1-阅读程序(三)
含有递归函数的程序 /**Copyright (c) 2014,烟台大学计算机学院*All gight reserved.*文件名称:temp.cpp*作者:邵帅*完成时间:2014年11月13日*版 ...
最新文章
- 寻找MEET大会直播中奖的小伙伴,你有红包待领取~
- CSS3:linear-gradient,线性渐变的使用方法
- ajax 上传读取excel
- [css] 举例说明你知道的css技巧有哪些?
- 【java】java 扩展可回调的Future
- k8s升级,HA集群1.12.0~HA集群1.13.2
- 迅捷cad_迅捷功能
- 分布式系统可观测性之应用业务指标监控
- 蜀门 - 青城加点完美攻略
- SQL点滴25—T-SQL面试语句,练练手
- 一个链表L 一个链表P 包含升序排列的整数 操作PrintLots(L,P)将打印L中那些由P所指定的位置上的元素
- Nacos如何实现统一配置管理
- springbooot学习记录
- 【分享】PPT--你不知道的使用技巧
- 北京烤鸭+腊肉炒花菜+香椿炒蛋
- 牛刀:中国房价的买点还没有…
- 计算机色彩再现原理,清华大学出版社-图书详情-《计算机色彩原理及应用》
- 迈向更灵活,贝壳 OLAP 平台架构演进历程
- 使用J-FLASH烧写stm32F407
- 使用scrapy爬虫框架来获取腾讯的招聘信息