图的邻接表法深度优先搜索

数据结构--图的深度优先搜索(DFS)(邻接表) 你还不会数据结构中图的深度优先搜索吗,还不快来看看。 阅读详情
# include <stdio.h>
# include <stdlib.h>
# define True 1
# define False 0
# define Error -1
# define OK 1
# define MAX_VERTEX_NUM 20
int visited[MAX_VERTEX_NUM];                       //定义标志数组
typedef char VertexData;


typedef enum{DG,DN,UDG,UDN} GraphKind;


typedef struct ArcNode{         //弧节点结构
int adjvex;
struct ArcNode *nextarc;
// OtherInfo info;
}ArcNode;


typedef struct VertexNode{       //表头节点结构
VertexData data;
ArcNode *firstarc;
}VertexNode;


typedef struct {
VertexNode vertex[MAX_VERTEX_NUM];
int vexnum,arcnum;
GraphKind kind;
}AdjList;


int LocateVertex(AdjList *g, VertexData v)         //求顶点位置函数
{
int j = Error,k;
for (k = 0; k < g->vexnum ; k++)
if (g->vertex[k].data  == v)
{
j = k;break;
}
return j;
}


void Crtadjlist(AdjList *g)            //创建邻接链表
{
int n,e,i,j,k;
char vt,vh;
ArcNode *p;
printf("请输入图的顶点个数和弧的个数\n");
scanf("%d%d", &n, &e);
g->vexnum  = n;
g->arcnum  = e;
printf("请输入顶点信息\n");
getchar();
for (i = 0; i < n; i++)
{
scanf("%c", &(g->vertex[i].data));
g->vertex[i].firstarc = NULL;
}
printf("请输入弧的两个顶点\n");
for (k = 0; k < e; k++)
{
getchar();
scanf("%c%c",&vt,&vh);
i = LocateVertex(g,vt);
j = LocateVertex(g,vh);
p = (ArcNode *)malloc(sizeof(ArcNode));
p->adjvex = j;
p->nextarc = g->vertex[i].firstarc;
g->vertex[i].firstarc = p;
}
}


void DepthFirstSearch(AdjList *g, int v0)  //深度优先搜索
{
ArcNode *p;
printf("%c ", g->vertex[v0].data );
visited[v0] = True;
p = g->vertex[v0].firstarc;
while (p != NULL)
{
if (!visited[p->adjvex])
DepthFirstSearch(g, p->adjvex);
p = p->nextarc;


}
}
TraverseGraph(AdjList *g)      //深搜
{
int vi;
for (vi = 0; vi < g->vexnum ; vi++)
visited[vi] = False;               //初始化标志数组
for (vi = 0; vi < g->vexnum; vi++)
if (!visited[vi])
DepthFirstSearch(g,vi);
}
int main(void)
{
AdjList g;
Crtadjlist (&g);
TraverseGraph(&g);
printf("\n");
return 0;
}
图:邻接表法创建无向图并深度优先搜索遍历 无向图: 代码: #include<iostream> using namespace std; #define pointMax 100 struct VtNode //权值信息 { int peace; VtNode *nextVt; int data; }; struct PoNode //顶点信息 { char data; VtNode *firstPo; }; struct A... 阅读详情

相关推荐

java 图 邻接表 深度优先遍历 广度优先遍历 最短路径

用Java描述的图,以邻接表存储,包含常用算法

邻接表-数组实现+深搜广搜(超详细)

图的邻接表存储与访问数组实现算法分析 图的存储结构有两种,基于数组的邻接矩阵存储和基于链表的邻接表存储。邻接矩阵存储比较容易实现,但需要很大的内存来存储,访问的时间复杂度高。基于链表的邻接表时间复杂度和空间复杂度比前者要小,但是难于实现。邻接表的数组实现方法综和了以上两种存储方法的优点,在时间复杂度和空间杂度上更优,并且易于理解和实现。 图的邻接矩阵存储,时间复杂度为o(n2),n是图中结点的个数...

qq_41884068的博客 1942

java使用邻接表对图进行深度和广度优先遍历

本程序通过java使用邻接表对图进行深度和广度优先遍历,其中包括图和节点的数据结构实现

【数据结构·考研】邻接表表示的图的深搜和广搜

基于邻接表的图的深搜和广搜

Jiawen9的博客 877

【硬件】通俗易懂的讲解晶体管(三极管和MOS管)的工作原理

晶体管是一个简单的元器件,可用于构建许多有趣的项目。在本文中,我将用通俗易懂的语言给您讲解晶体管的工作原理,以便您可以在电路设计中更好的使用静态管。一旦你学习这些基础知识,对以后的设计和使用来说,将会变得非常容易。我们将重点介绍两种最常见的晶体管:双极型晶体管(三极管)和MOSFET。晶体管的工作原理其实是类似于电子开关。它可以打开和关闭电路。一个简单的思考方法是将晶体管视为无源的继电器。晶体管类似于继电器,从某种意义上说,您可以使用它来打开和关闭某些东西。但晶体管也可以部分导通,一般在放大电路中使用,这部

1万+

告别命令行!用这个开源的Web版Kettle工具,5分钟搞定数据集成任务编排

本文介绍了一款开源的Web版Kettle工具,通过直观的拖拽界面大幅提升数据集成效率,告别复杂的命令行操作。该工具基于Kettle核心引擎,支持跨平台协作、轻量化访问和降低学习曲线,特别适合业务分析师快速上手。实测显示,使用该工具后任务配置错误率下降62%,协作效率提升40%。

weixin_30267785的博客 436

数据结构——图篇(邻接矩阵、邻接表、深度优先搜索、广度优先搜索)

数据结构关于图的基本知识以及相关代码

m0_66881249的博客 3889

【实战技巧】matplotlib中文标签显示问题的3种高效解决方案

本文详细介绍了解决matplotlib中文标签显示问题的3种高效方法,包括修改字体设置、临时指定字体和修改后端配置。针对不同操作系统和环境提供了实用技巧,帮助开发者快速解决中文显示为方框的常见问题,提升数据可视化效果。

weixin_30855099的博客 172

图的深度优先搜索(dfs)

图的遍历, 即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略: (1)深度优先遍历 (2)广度优先遍历 图的深度优先搜索(Depth First Search) 指的是在搜索时,如果遇到一个结点既有子结点,又有兄弟结点,那么先找子结点,然后找兄弟结点。 深度优先遍历,从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接结点, 可以这样理解:每次都在

wujianrenn的博客 9558

MySQL根据idb文件恢复数据

恢复前提 MySQL 5.* 和 8.* 的恢复方式大同小异,最基本的区别是8.* 中,不再有表结构frm文件,所以要恢复 8.* 的数据,就必须要有完整的建表语句。 而恢复 5.* 的数据,就需要idb文件和 frm文件,当然,如果有完整的建表语句的话,不用frm文件也行。 恢复步骤 需要注意的是,以下操作需要选定数据库后执行。 5.* 恢复表结构 确定表列数 首先创建一张 与需要恢复数据的表 的名字相同的新表,如果已知原表的字段数量的话,就按照原表字段数建表,字段名和类型都不用考虑,如果不知道数量的话,

weixin_45121446的博客 5449

【第三只眼:Oracle通过归档日志查看系统的业务高峰sql】

根据oracle归档的业务高峰量,查找业务sql,进行优化

霍然的专栏 579

7.22 试基于图的深度优先搜索策略写一算法,判别以邻接表方式存储的有向图中是否存在由顶点vi到顶点vj的路径(i≠j)。

题目7.22:试基于图的深度优先搜索策略写一算法,判别以邻接表方式存储的有向图中是否存在由顶点vi到顶点vj的路径(i≠j)。注意:算法中涉及的图的基本操作必须在此存储结构上实现。 图的邻接表结构 typedef struct ArcNode { int adjvex; struct ArcNode *nextarc; }ArcNode; typedef struct VNode {...

北纬37° 2万+

ICML-2025《Learning from Sample Stability for Deep Clustering》

用于指导深度聚类模型的训练,从而提升模型对困难样本的学习能力,最终改善整体聚类性能。首先,利用K-means在原始样本(非增强)的表征上进行聚类,得到初始聚类分配。其目的是鼓励模型对同一稳定样本在连续epoch中产生相近的表征。输出差异大)会产生更大的损失值,从而引导模型优先优化这些困难样本。此损失借鉴了NT-Xent损失的思想,但将正样本对定义为。最后,通过对比学习优化聚类中心,将同一聚类在。为了获得更具代表性的聚类中心,论文提出。为了学习更鲁棒的表征,模型在在线网络。首先,论文定义了样本。

Christo的博客 831

试基于图的深度优先搜索策略写一算法,判别以邻接表方式存储的有向图中是否存在由顶点a到顶点b的路径

试基于图的深度优先搜索策略写一算法,判别以邻接表方式存储的有向图中是否存在由顶点a到顶点b的路径,注意a!=b(必须严格按照样例进行输入输出,先输入图的顶点数和弧数,并依次输入弧的相关信息,最后输入要判断的两个顶点的信息)

qq_62689346的博客 3271

windows exe爬虫:exe抓包

在不知情所拦截应用使用的流量时,所以建议用Wireshark。本文利用python代码,实现自动拦截,写入pcap包,并用代码分析流量的协议。这样会在本地目录下生成capture_inbound.pcap,可以用wireshark分析,也可以利用python代码进行分析,如果使用python代码进行分析,需要借助pyshark或者scapy。使用的python WinDivert的包,当然前提也是需要安装Wireshark软件,设置环境变量,并安装pydirvert包。

youbingchen的博客 619

手把手教你用ESP32-C3打造智能聊天机器人-立创实战派

本文将详细介绍如何利用立创ESP32-C3开发板,烧录小智AI程序,快速实现一个功能强大的聊天机器人。

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 5543

C/C++: 邻接表图深度优先搜索

#include #define MaxVertexNum 100 //最大顶点数量 #define QueueSize 50 //队列长度 #define bool int #define false 0 #define true 1 bool visited[MaxVertexNum]; //顶点访问标记 typedef char VertexType; //顶点数据类型 typede

GPU全栈博主 1373

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C 试基于图的深度优先搜索策略写一算法 判别以邻接表方式存储的有向图中是否存在由顶点 vi到顶点 vj的路径 i≠j 。

给大佬跪了,这个是要返回的,但是还要兼顾顶点上连接的其他节点,不能一个不行就不行,所以走的路径只返回走通的,走不通的略过,直到最后,能走到最后就说明根本没有通的路径,就这样。也可以把这个点上的所有连接点用深度遍历走一次,然后看看记录是否点亮的数组里是不是亮着的,亮着就说明是有路径,不亮就没有。严蔚敏 数据结构 7.22。...

赫凯的博客 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

图的广度优先搜索和深度优先搜索

图的广度优先搜索和深度优先搜索,BFS和DFS的算法思路、分析、代码、应用,遍历的生成树、生成森林问题。

24考研人晴落的博客 7023

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

数据结构图的建立和遍历(邻接表、邻接矩阵)

首先是图的存储结构:一、邻接矩阵存储方式实现邻接矩阵存储的结构体中,包括一个存储边的结构体,存储每条边的信息(权值) 将这个边的结构体的二维数组作为图的基本存储结构,放到单个图的结构体中 每个图又包含总节点数、总边数、图的类型等信息 最下方定义一个遍历操作图的函数#include<iostream> #include<stdio.h> #include<string> #include<que

kuronekonano的博客 1万+

C语言基于邻接表的图的深度优先、广度优先遍历

目录 ​ 1.深度优先(Depth_First Search) 2.广度优先(Broadth_First Search) 3.源代码示例 3.1深度优先 3.2广度优先 假设有无向图G = (V,E),标志数组visited [ n ] (1)点集 V = { } 边集 E = { } (2)visited [ n ] (n为图中顶点个数,初始元素都为0) 若.....................

记录学习点滴 4万+

Go语言实现深度优先搜索(DFS):从邻接表到图遍历算法详解

图数据结构是计算机科学的核心概念,常见表示方式有邻接矩阵和邻接表。其中邻接表通过存储每个顶点的邻居列表,在稀疏图场景下大幅节省空间,适合处理百万级顶点的真实网络。深度优先搜索(DFS)基于递归或显式栈实现“一条道走到黑”的遍历策略,能高效解决连通分量检测、路径查找、环检测、拓扑排序等经典图算法问题。在Go语言中,利用map和切片可简洁地构建邻接表,但需注意append的底层数组变化、递归深度限制、并发访问加锁等工程细节。本文通过完整代码演示DFS的递归与迭代两种实现方式,对比其遍历顺序差异,并总结常见陷阱,

weixin_42527160的博客 268

邻接表实现图的深度遍历

邻接表实现图的深度遍历,纠结的问题啊。。。。。 View Code #include &lt;stdio.h&gt;#include &lt;malloc.h&gt;#define MAX 100typedef struct arcnode/*表节点*/{ int adjvex; /*邻接点*/ struct arcnode *nextarc;/*指向下一条弧的指针*/}ar...

weixin_34190136的博客 188

一文搞定图的存储表示及DFS(无向图、有向图、网的邻接矩阵及邻接表)

目录图存储表示邻接矩阵邻接表 图 图是由顶点的有穷集合V(G)和边的有穷集合E(G)组成的,用G=(V,E)表示图,是多对多关系,其中分为有向图和无向图,带权图又被称为网。 存储表示 图常用的存储表示----------邻接矩阵法和邻接表法。 邻接矩阵 图有N个顶点,那么这个图的邻接矩阵是一个N*N的二维数组。代码中设置两点没边,则这两点对应的二维数组值为0,其他有边的两点看是否为带权图,是则二维数组值就为两点的权值,不是则用一个特定的数字来代表这两点有边,当然还要判断这个图是有向图还是无向图了,具体实现看

weixin_47060099的博客 1846

深度优先算法——图(邻接表)

【代码】深度优先算法——图(邻接表)

qq_54731568的博客 578

noj19基于图的深度优先搜索策略

1.看一下邻接表法 对图中的每个顶点vi都分别建立一个对应的单链表(对无向图称为“边表”,对有向图称为“出边表”)来存储所有邻接与顶点vi的边(对于有向图而言是指以vi为尾的弧),边表中的每个结点分别对应于邻接于顶点vi的一条边。边表中的每个结点主要包含两个域,其中邻接点域(adjvex)指示与顶点vi邻接的点在图中的位置,链域(nextedge)指示下一条边或弧的结点。如果是带权图,还可以再加一个域weight,表示从vi到adjvex这条边的权值。(这道题没有涉及到权值) 对于图中的所有顶点信息,用一.

蜜雪冰城 477
上一篇: 作业题
下一篇: NYOJ 448 寻找最大数
java_oracle_c
博客等级 码龄13年 2粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值