图的创建和遍历

孤勇者探险(图的遍历)

作者 YJ

单位 西南石油大学

一款名为“孤勇者探险”的游戏,游戏中共有若干个小岛,每个岛上均有怪兽,闯关者打倒岛上的怪兽则可获得该岛对应的游戏积分(每个岛的积分根据难度可能不相同),编写程序求出最终闯关成功者(闯过所有小岛)共获得多少积分,并给出对应的闯关行进路线。
思路提示:
游戏地图可抽象为图结构,且一定为连通图,例如:

image.png


图中顶点的值则为每个小岛对应的积分,‘0’小岛为起点,从0号开始遍历,将各个顶点的值累加则为最终获得得分,同时输出遍历序列,则为对应的闯关行进路线。

函数接口定义:

void CreateUDG(AMGraph &G); //创建图,采用邻接矩阵存储
int DFS(AMGraph G, int v);//以v为起点深度优先遍历,求出各顶点值的和作为函数返回值

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>
#define MVNum 100int visited[MVNum];typedef struct{int vexs[MVNum];        //顶点向量,各小岛对应积分int arcs[MVNum][MVNum]; //邻接矩阵int vexnum,arcnum;      //顶点数,边数
}AMGraph;
int LocateVex(AMGraph G,int u)   //查询顶点u的下标{int i;for(i=0;i<G.vexnum;++i)if(   u==G.vexs[i]     )       return i;return -1;}
void CreateUDG(AMGraph &G); //创建图,采用邻接矩阵存储
int DFS(AMGraph G, int v);//以v为起点深度优先遍历,求出各顶点值的和作为返回值
int main(){AMGraph G;int i;CreateUDG(G);i=LocateVex(G,0);  //找到起点下标if(i>=0)printf("\n%d",DFS(G,i));return 0;
}/* 请在这里填写答案 */

输入格式:

第1行依次输入各个小岛对应得分(整数),即顶点的值,以-1结束(顶点不包含-1)
接下来若干行输入每条边的信息,格式为:v1空格v2(v1、v2为小岛对应的下标),直到输入‘-1 -1’结束。

输出格式:

输出两行数据,第一行为行进路线,以小岛的积分(即顶点的值)作为小岛标识,每个标识之间间隔一个空格,第二行为一个整数,为最终获得积分,无换行。

输入样例:

0 1 2 3 4 5 6 -1
0 3
0 4
3 2
3 1
2 5
1 5
4 5
5 6
-1 -1

输出样例:

0 3 1 5 2 4 6 
21
void CreateUDG(AMGraph &G)
{int i=0;int j;scanf("%d",&G.vexs[i]);G.vexnum=0;while(G.vexs[i]!=-1){i++;scanf("%d",&G.vexs[i]);G.vexnum++;}for(i=0;i<G.vexnum ;i++){for(j=0;j<G.vexnum;j++){G.arcs[i][j]=0;}}int v1,v2;G.arcnum=0;scanf("%d %d",&v1,&v2);while((v1 != -1) && (v2 != -1)){G.arcs[v1][v2]=1;G.arcs[v2][v1]=G.arcs[v1][v2];G.arcnum++;scanf("%d %d",&v1,&v2);}
}
int DFS(AMGraph G, int v)
{int cnt=0;printf("%d ",G.vexs[v]);cnt+=G.vexs[v];visited[v]=1;int i;int k=0;for(i=0;i<G.vexnum;i++){if((G.arcs[v][i]!=0) && (!visited[i])){k=DFS(G,i);cnt+=k;}}return cnt;
}

 图的创建和遍历一定要注意把顶点下标顶点的值区分开。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/21320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【recast-navigation-js】使用three.js辅助绘制Agent

目录 说在前面使用Tweakpane添加CrowAgent其他 说在前面 操作系统&#xff1a;windows 11浏览器&#xff1a;edge版本 124.0.2478.97recast-navigation-js版本&#xff1a;0.29.0golang版本&#xff1a;1.21.5 使用Tweakpane fps面板interface FPSGraph extends BladeApi<B…

JAVA流程控制--For循环

1.虽然所有循环都可以用while或do...while表示&#xff0c;但Java提供了另外一种语句——for循环&#xff0c;使一些循环结构变得简单 2.for循环语句是支持迭代的一种通用结构&#xff0c;是最有效&#xff0c;最灵活的循环&#xff0c;结构 3.for循环执行的次数是在…

单元测试的心法分享

大家好&#xff0c;我是G探险者&#xff01; 今天我们简单聊聊单元测试的哪些事儿~ 两天时间我玩明白了单元测试的套路。 这里我分享一下思路。 在我眼里单元测试室什么&#xff1f; 请看这张草图&#xff1a; 单元测试主要关注单个代码单元&#xff08;通常是类或方法&am…

Docker成功启动Rabbitmq却访问不了管理页面问题解决

目录 启动步骤&#xff1a; 无法访问问题总结&#xff1a; 启动步骤&#xff1a; 拉取镜像&#xff1a; docker pull rabbitmq 运行&#xff1a; docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq进入容器&#xff1a; docker exec -it 容器id /bin/…

python基础知识点总结(第二节判断与循环)

一、判断语句 1、if判断语句 ~if语句的基本格式 if 要判断的条件&#xff1a; 条件成立时&#xff0c;要做的事情 ~if语句的注意事项&#xff1a; 判断语句的结果一定要是布尔类型不要忘记判断条件后的&#xff1a;冒号归属于if语句的代码块&#xff0c;需要在前方填…

【操作与配置】VS2017与MFC环境配置

【操作与配置】VS2017与MFC环境配置 概述 Visual Studio 是一款强大且多功能的集成开发环境&#xff08;IDE&#xff09;&#xff0c;适用于软件开发人员和团队。使用此应用程序&#xff0c;您可以构建和调试现代Web应用程序&#xff0c;并利用扩展帮助探索几乎任何编程语言。…

PySide6在VScode中提示:vscode module not found error: no module named ‘pyside6‘解决方案

最近在B站学习PySide6&#xff1a;PySide6百炼成真&#xff0c;带你系统性入门Qt https://www.bilibili.com/video/BV1c84y1N7iL?p3&vd_source256724e7f8bba144c62a17f9fa758a04 学习到第3节&#xff1a;003基础框架 003基础框架 from PySide6.QtWidgets import QApplicat…

【讲解下常见的分类算法,什么是分类算法?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

千锋教育大优惠

IT全学科自学至尊卡&#xff08;3年卡&#xff09; Linux云计算运维、Python全栈、数据分析、人工智能、Java、大前端、网络安全、物联网、全媒体、影视剪辑等14大主流方向&#xff0c;300精品视频课程免费学。课程持续更新&#xff0c;电脑端手机APP小程序多平台无忧畅学&…

Android 输入法框架流程

输入法框架流程梳理 输入法框架构成 输入法管理端&#xff08;IMMS/InputMethodManagerService&#xff09; 主要负责输入法服务端与客户端的绑定&#xff1b;输入法的切换/显示/隐藏/启用/关闭。输入法服务端&#xff08;IMS/InputMethodService&#xff09; 输入法服务&…

FS118M 单A口QC协议芯片

FS118M是一个QC快充协议芯片&#xff0c;FS118M可以识别插入的手机类型&#xff0c;选择最为合适的协议应对手机需要。USB Type-A 口的 D连接到FS118M芯片&#xff0c;当手机插入到 USB Type-A 口后&#xff0c;根据各个协议的约定&#xff0c;手机和FS118M之间将开始互相识别&…

nginx的配置粗记

小白nginx的配置随笔&#xff08;随便记记&#xff09; 前言 我们都知道nginx有很多用途&#xff0c;比如&#xff1a;负载均衡&#xff0c;反向代理&#xff0c;网关路由&#xff0c;解决跨域等问题。我这次开发项目&#xff0c;用到的一些功能也涉及到了对nginx的配置&#…

MySQL—函数—流程控制函数(基础)

一、引言 接下来&#xff0c;我们就进入函数的最后一个部分&#xff1a;流程函数。而流程控制函数在我们的日常开发过程是很有用的。 流程控制函数在我们 sql 语句当中&#xff0c;经常用来实现条件的筛选&#xff0c;从而提高语句的一个执行效率。 我们主要介绍以下4个流程控…

如何在镜像中安装固定版本的node和npm

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、使用 Dockerfile 创建自定义镜像二、如何安装固定版本的node及npm总结 前言 最近在做前端工程化相关的内容&#xff0c;需要在一个镜像内安装固定版本的 N…

VirtualBox Ubuntu系统硬盘扩容

1、关闭虚拟机&#xff0c;找到需要扩容的硬盘&#xff0c;修改为新的容量80GB&#xff0c;应用保存。 2、打开VM&#xff0c;进入系统&#xff0c;使用lsblk可以看到硬盘容量已经变为80GB&#xff0c;但硬盘根分区还没有扩容&#xff0c;使用df查看根文件系统也没有扩容。 [19…

【并发程序设计】14.消息队列

14.消息队列 消息队列&#xff08;Message Queue&#xff09;是一种通信机制&#xff0c;用于在分布式系统中传递和管理消息的队列型数据结构。 消息队列通常是一个先进先出&#xff08;FIFO&#xff09;的数据结构&#xff0c;它允许多个进程或线程之间以异步方式进行通信。…

HTML静态网页成品作业(HTML+CSS)——家乡常德介绍网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

hexo init命令报错:Error: EPERM: operation not permitted, mkdir ‘D:\‘

我用的是git bash通过hexo init安装hexo的&#xff0c;但是报错如下&#xff1a; $ hexo init INFO Cloning hexo-starter https://github.com/hexojs/hexo-starter.git fatal: unable to access https://github.com/hexojs/hexo-starter.git/: HTTP/2 stream 1 was not clos…

有容微ASW3642 HDMI或者DP双向切换器,二进一出,一进二出支持4K60HZ分辨率

ASW3642描述&#xff1a; ASW3642 是一款 12 通道 1:2 或 2:1 双向多路复 用器/ 多路解复用器。 ASW3642 可由 2.6V 至 4.5V 的电源供电&#xff0c;适用于电池供电的应用。该器 件的导通电阻&#xff08;R ON &#xff09;较低并且 I/O 电容较小&#xff0c; 能…

Linux共享内存创建和删除

最近项目中使用到了共享内存记录下 创建共享内存: 删除共享内存: 代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <sys/mman.h> #include <sys/stat.h> #include <u…