数据结构-图的课后习题(2)
题目要求:
对于下面的这个无向网,给出:
1.“深度优先搜索序列”(从V1开始)
2.“广度优先序列”(从V1开始)
3.“用Prim算法求最小生成树”
代码实现:
1.深度优先搜索:
代码部分:
#include<stdio.h>
#include<malloc.h>
#define MAX 100typedef struct ArcNode{int adjvex;int weight;struct ArcNode *nextarc;
}ArcNode;
typedef struct VNode{char vertex[2];ArcNode *firstarc;
}VNode;
typedef VNode AdjList[MAX];
typedef struct ALGraph{AdjList adjlist;int vexnum,arcnum;
}ALGraph;int LocateVerTex(ALGraph *G,char *v)
{int k;for(k=0;k<G->vexnum;k++)if(G->adjlist[k].vertex[0] == v[0] && G->adjlist[k].vertex[1] == v[1])return k;return -1;
}void CreateALGraph(ALGraph *G)
{int i,adj1,adj2;int weight;char v1[2],v2[2];ArcNode *tmp = NULL;printf("请输入顶点个数和边数:\n");scanf("%d %d",&G->vexnum,&G->arcnum);getchar();printf("请输入{%d}个顶点\n",G->vexnum);for(i=0;i<G->vexnum;i++){scanf("%c%c",&G->adjlist[i].vertex[0],&G->adjlist[i].vertex[1]);G->adjlist[i].firstarc = NULL;}getchar();printf("请输入{%d}条边,格式(v1 v2 权值).\n",G->arcnum);for(i=0;i<G->arcnum;i++){scanf("%c%c %c%c %d",&v1[0],&v1[1],&v2[0],&v2[1],&weight);getchar();adj1 = LocateVerTex(G,v1);adj2 = LocateVerTex(G,v2);if(adj1 == -1 || adj2 == -1){printf("失败.\n");i = i - 1;continue;}else{tmp = (ArcNode*)malloc(sizeof(ArcNode));tmp->adjvex = adj2;tmp->weight = weight;tmp->nextarc = G->adjlist[adj1].firstarc;G->adjlist[adj1].firstarc = tmp;tmp = (ArcNode*)malloc(sizeof(ArcNode));tmp->adjvex = adj1;tmp->weight = weight;tmp->nextarc = G->adjlist[adj2].firstarc;G->adjlist[adj2].firstarc = tmp;printf("成功.\n");}}
}void DFS(ALGraph *G,int v,int *visit)
{ int w;ArcNode *tmp = NULL;visit[v] = 1;printf("访问顶点:{%c%c}.\n",G->adjlist[v].vertex[0],G->adjlist[v].vertex[1]);tmp = G->adjlist[v].firstarc;while(tmp){w = tmp->adjvex;if(visit[w] == 0){DFS(G,w,visit);}tmp = tmp->nextarc;}
}void DFSTraverse(ALGraph *G)
{int visit[G->vexnum];int v;for(v=0;v<G->vexnum;v++){visit[v] = 0;}for(v=0;v<G->vexnum;v++){if(visit[v] == 0){DFS(G,v,visit);}}
}int main()
{ALGraph G;CreateALGraph(&G);DFSTraverse(&G);return 0;
}
验证:
2.广度优先搜索:
代码部分:
#include<stdio.h>
#define MAX 100
typedef struct MGraph{char vertex[MAX][2];int arcs[MAX][MAX];int vexnum,arcnum;
}Mgraph;
int LocateVerTex(MGraph *G,char *v)
{int k;for(k=0;k<G->vexnum;k++){if(G->vertex[k][0] == v[0] && G->vertex[k][1] == v[1])return k;}return -1;
}void CreateMGraph(MGraph *G)
{int i,j,adj1,adj2;int weight;char v1[2],v2[2];printf("请输入顶点个数和边数:\n");scanf("%d %d",&G->vexnum,&G->arcnum);getchar();printf("请输入{%d}个顶点\n",G->vexnum);for(i=0;i<G->vexnum;i++){scanf("%c%c",&G->vertex[i][0],&G->vertex[i][1]);}getchar();for(i=0;i<G->vexnum;i++)for(j=0;j<G->vexnum;j++)G->arcs[i][j] = 0;printf("请输入{%d}条边,格式(v1 v2 权值).\n",G->arcnum);for(i=0;i<G->arcnum;i++){scanf("%c%c %c%c %d",&v1[0],&v1[1],&v2[0],&v2[1],&weight);getchar();adj1 = LocateVerTex(G,v1);adj2 = LocateVerTex(G,v2);if(adj1 == -1 || adj2 == -1){printf("失败.\n");i = i - 1;continue;}else{G->arcs[adj1][adj2] = weight;G->arcs[adj2][adj1] = weight;printf("成功.\n");}}
}void BFSTraverse(MGraph *G)
{int Q[G->vexnum+1],visit[G->vexnum];int i,u,w;for(i=0;i<G->vexnum;i++)visit[i] = 0;int front = 0,rear = 0;for(i=0;i<G->vexnum;i++){if(visit[i] == 0){visit[i] = 1;printf("输出顶点:{%c%c}\n",G->vertex[i][0],G->vertex[i][1]);Q[rear] = i;rear = (rear+1) % (G->vexnum+1);while(front != rear){u = Q[front];front = (front+1) % (G->vexnum+1);for(w=0;w<G->vexnum;w++){if(G->arcs[u][w] != 0 && visit[w] == 0){visit[w] = 1;printf("输出顶点:{%c%c}\n",G->vertex[w][0],G->vertex[w][1]);Q[rear] = w;rear = (rear+1) % (G->vexnum+1);}}}}}
}int main()
{MGraph G;CreateMGraph(&G);BFSTraverse(&G);return 0;
}
验证:
3.用Prim算法求得最小生成树:
代码部分:
#include<stdio.h>
#define MAX 100
typedef struct MGraph{char vertex[MAX][2];int arcs[MAX][MAX];int vexnum,arcnum;
}Mgraph;
typedef struct closedge{char vertex[MAX][2];int lowcost[MAX];
}closedge;int LocateVerTex(MGraph *G,char *v)
{int k;for(k=0;k<G->vexnum;k++){if(G->vertex[k][0] == v[0] && G->vertex[k][1] == v[1])return k;}return -1;
}void CreateMGraph(MGraph *G)
{int i,j,adj1,adj2;int weight;char v1[2],v2[2];printf("请输入顶点个数和边数:\n");scanf("%d %d",&G->vexnum,&G->arcnum);getchar();printf("请输入{%d}个顶点\n",G->vexnum);for(i=0;i<G->vexnum;i++){scanf("%c%c",&G->vertex[i][0],&G->vertex[i][1]);}getchar();for(i=0;i<G->vexnum;i++)for(j=0;j<G->vexnum;j++)G->arcs[i][j] = 999;printf("请输入{%d}条边,格式(v1 v2 权值).\n",G->arcnum);for(i=0;i<G->arcnum;i++){scanf("%c%c %c%c %d",&v1[0],&v1[1],&v2[0],&v2[1],&weight);getchar();adj1 = LocateVerTex(G,v1);adj2 = LocateVerTex(G,v2);if(adj1 == -1 || adj2 == -1){printf("失败.\n");i = i - 1;continue;}else{G->arcs[adj1][adj2] = weight;G->arcs[adj2][adj1] = weight;printf("成功.\n");}}
}int MiniMum(MGraph *G,closedge *cd)
{int j,p=1,min=999;for(j=0;j<G->vexnum;j++){if(cd->lowcost[j] != 0 && cd->lowcost[j] < min){min = cd->lowcost[j];p = j;}}return p;
}void MiniSpanTree_PRIM(MGraph *G,char *u)
{closedge cd;int i,j,k;k = LocateVerTex(G,u);for(j=0;j<G->vexnum;j++){if(j != k){cd.vertex[j][0] = u[0];cd.vertex[j][1] = u[1];cd.lowcost[j] = G->arcs[k][j];}}cd.lowcost[k] = 0;printf("最小代价生成树的各条边为:\n");for(i=1;i<G->vexnum;i++){k = MiniMum(G,&cd);printf("输出边%c%c->%c%c,权值为:{%d}\n",cd.vertex[k][0],cd.vertex[k][1],G->vertex[k][0],G->vertex[k][1],cd.lowcost[k]);cd.lowcost[k] = 0;for(j=0;j<G->vexnum;j++){if(G->arcs[k][j] < cd.lowcost[j]){cd.vertex[j][0] = G->vertex[k][0];cd.vertex[j][1] = G->vertex[k][1];cd.lowcost[j] = G->arcs[k][j];}}}
}int main()
{char original_vertex[2]={'V','1'};MGraph G;CreateMGraph(&G);MiniSpanTree_PRIM(&G,original_vertex);return 0;
}
验证:
相关文章:

数据结构-图的课后习题(2)
题目要求: 对于下面的这个无向网,给出: 1.“深度优先搜索序列”(从V1开始) 2.“广度优先序列”(从V1开始) 3.“用Prim算法求最小生成树” 代码实现: 1.深度优先搜索:…...

[Machine Learning] 多任务学习
文章目录 基于参数的MTL模型 (Parameter-based MTL Models)基于特征的MTL模型 (Feature-based MTL Models)基于特征的MTL模型 I:基于特征的MTL模型 II: 基于特征和参数的MTL模型 (Feature- and Parameter-based MTL Models) 多任务学习 (Multi-task Lear…...
【C语言从入门到放弃 6】递归,强制类型转换,可变参数和错误处理详解
C语言是一种功能强大的编程语言,具有许多高级特性,包括强制类型转换,递归,可变参数和错误处理。在本文中,我们将深入了解这些特性,并提供简单的示例来帮助理解。 递归 递归是一种函数调用自身的技术&…...

使用LLama和ChatGPT为多聊天后端构建微服务
微服务架构便于创建边界明确定义的灵活独立服务。这种可扩展的方法使开发人员能够在不影响整个应用程序的情况下单独维护和完善服务。然而,若要充分发挥微服务架构的潜力、特别是针对基于人工智能的聊天应用程序,需要与最新的大语言模型(LLM&…...

CSS3 用户界面、图片、按钮
一、CSS3用户界面: 在CSS3中,增加了一些新的用户界面特性来调整元素尺寸、框尺寸和外边框。CSS3用户界面属性:resize、box-sizing、outline-offset。 1、resize: resize属性指定一个元素是否应该由用户去调整大小。 <style…...
说说对Redux中间件的理解?常用的中间件有哪些?实现原理?
一、是什么 中间件(Middleware)是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的…...

【已验证】php配置连接sql server中文乱码(解决方法)更改utf-8格式
解决数据库中的中文数据在页面显示乱码的问题 在连接的$connectionInfo中设置"CharacterSet" > "UTF-8",指定编码方式即可 $connectionInfo array("UID">$uid, "PWD">$pwd, "Database">$database…...

《未来之路:技术探索与梦想的追逐》
创作纪念日 日期:2023年07月05日文章标题:《从零开始-与大语言模型对话学技术-gradio篇(1)》成为创作者第128天 在这个平凡的一天,我撰写了自己的第一篇技术博客,题为《从零开始-与大语言模型对话学技术-…...

vue3 自动导入composition-apiI和组件
1.api的自动导入 常规写法: <script setup>import { ref, reactive, onMounted, computed ,watch } from vue;import { useRouter } from "vue-router";const router useRouter();const person reactive ({name:张三,age…...
LeetCode15-三数之和
本文最精华的就是下面的视频讲解! 🔗:参考的视频讲解 class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> ans new ArrayList<>();Arrays.sort(nums);int nnums.length;int i0,j0,k0,sum0;for(…...
安全物理环境(设备和技术注解)
网络安全等级保护相关标准参考《GB/T 22239-2019 网络安全等级保护基本要求》和《GB/T 28448-2019 网络安全等级保护测评要求》 密码应用安全性相关标准参考《GB/T 39786-2021 信息系统密码应用基本要求》和《GM/T 0115-2021 信息系统密码应用测评要求》 1物理位置选择 1.1机房…...

箭头函数 跟匿名函数this的指向问题
var id 10; function foo() {// 创建时 this->windowthis.id 20; // 等价于 window.id 20let c () > {console.log("id1:", this.id); // 创建时父级 创建时 this->window};let d function () {console.log("id2:", this.id); // 执行时本…...
Java Stream:List分组成Map或LinkedHashMap
在Java中,使用Stream API可以轻松地对集合进行操作,包括将List转换为Map或LinkedHashMap。本篇博客将演示如何利用Java Stream实现这两种转换,同时假设List中的元素是User对象。 1. 数据准备 List<User> list new ArrayList<>(…...

vue2+elementui使用MessageBox 弹框$msgbox自定义VNode内容:实现radio
虽说实现下面的效果,用el-dialog很轻松就能搞定。但是这种简单的交互,我更喜欢使用MessageBox。 话不多说,直接上代码~ <el-button type"primary" size"mini" click"handleApply()" >处理申请</el-b…...
OC 实现手指滑动拖动View
RPReplay_Final1699613924 实现手指滑动拖动View 支持手势移动的控件 支持 Masonry frame 布局 使用富文本 也支持自动高度 核心代码 - (void)handlePanGesture:(UIPanGestureRecognizer *)p {CGPoint panPoint [p locationInView:self.view];CGPoint currentViewPoint _dr…...

多级缓存之实现多级缓存
多级缓存的实现离不开Nginx编程,而Nginx编程又离不开OpenResty。 1. OpenResty快速入门 我们希望达到的多级缓存架构如图: 其中: windows上的nginx用来做反向代理服务,将前端的查询商品的ajax请求代理到OpenResty集群 OpenRest…...

React【axios、全局处理、 antd UI库、更改主题、使用css module的情况下修改第三方库的样式、支持sass less】(十三)
文件目录 Proxying in Development http-proxy-middleware fetch_get fetch 是否成功 axios 全局处理 antd UI库 更改主题 使用css module的情况下修改第三方库的样式 支持sass & less Proxying in Development 在开发模式下,如果客户端所在服务器跟后…...

在gitlab中指定自定义 CI/CD 配置文件
文章目录 1. 介绍2. 配置操作3. 配置场景3.1 CI/CD 配置文件在当前项目step1:在当前项目中创建目录,编写流水线文件存放在该目录中step2:在当前项目中配置step3:运行流水线测试 3.2 CI/CD 配置文件位于外部站点上step1:…...
(论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
文献阅读笔记 简介 题目 Learning a Deep Compact Image Representation for Visual Tracking 作者 N Wang, DY Yeung 原文链接 Learning a Deep Compact Image Representation for Visual Tracking (neurips.cc) 关键词 Object tracking、DLT、SDAE 研究问题 track…...
浅谈设计模式
文章目录 一、单例模式 1.饿汉模式 2.懒汉模式 二、工厂模式 三、建造者模式 四、代理模式 设计模式是前辈们对代码开发的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...