数据结构实验 图

一、实验目的

熟悉图的两种常用的存储结构,以及在这两种存储结构上的两种遍历图的方法,即深度优先遍历和广度优先遍历。进一步掌握递归算法的设计方法。

关于各种典型著名的复杂算法,在上机实习方面不做基本要求。更适合于安排大型课程设计。

二、实例

  1. 图的邻接矩阵存储(数组表示)、简单输出。

本题的目的是给出一个无向图数组表示的简单启示,在此基础上稍加改动可以实现网(边上带权值的图)的邻接矩阵表示。

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
邻接表是一种常见的存储方式,可以用于实现的基本操作。下面是使用邻接表存储的一个无向的示例: ![邻接表存储示例](https://img-blog.csdnimg.cn/20210306201453559.png) 在邻接表中,每个顶点都对应一个链表,链表中存储与该顶点相邻的所有顶点。对于无向来说,由于每条边都可以看做是两个端点之间的连接,因此每条边都需要在两个对应的链表中存储。 下面是使用C++代码实现上述的邻接表存储: ```c++ #include <iostream> #include <vector> using namespace std; // 邻接表存储的节点结构体 struct Node { int val; // 节点的值 vector<int> edges; // 与该节点相邻的所有节点的索引 }; // 邻接表存储的结构体 struct Graph { vector<Node> nodes; // 所有节点的数组 // 添加一条边 void addEdge(int u, int v) { nodes[u].edges.push_back(v); nodes[v].edges.push_back(u); } }; int main() { Graph g; g.nodes.resize(6); // 初始化6个节点 // 添加边 g.addEdge(0, 1); g.addEdge(0, 2); g.addEdge(1, 2); g.addEdge(1, 3); g.addEdge(2, 4); g.addEdge(3, 4); g.addEdge(3, 5); g.addEdge(4, 5); // 输出邻接表 for (int i = 0; i < g.nodes.size(); i++) { cout << i << ": "; for (int j = 0; j < g.nodes[i].edges.size(); j++) { cout << g.nodes[i].edges[j] << " "; } cout << endl; } return 0; } ``` 运行上述代码,输出结果为: ``` 0: 1 2 1: 0 2 3 2: 0 1 4 3: 1 4 5 4: 2 3 5 5: 3 4 ``` 可以看到,每个节点的链表中存储了与该节点相邻的节点的索引,从而实现了的存储。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杪商柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值