408数据结构学习笔记——图的应用(三)

简介: 408数据结构学习笔记——图的应用
+关注继续查看

4.王道课后题

e3b5c0df4e8d46f7badcf2a350a386e5.png 1.1→2→3→5→7→4→6

1234567
10336
2045
3043
405
503
6307
70

2.当一个顶点只有出度没有入度时,它不可能与其它顶点成为一个强连通分量;该图有七个强连通分量

3.1→2→4→6→3→5→7;1→4→2→6→3→5→7

4.prim算法:1→2        1→3        3→6        3→5        5→7        6→4

kruskal算法:1→2        1→3        3→6        5→7        3→5        6→4

3aa81f778e60446685ecdcdd246d5601.png

  1. 顶点2:1→2        7
  2. 顶点3:1→3        11
  3. 顶点4:1→4        16
  4. 顶点5:1→3→5  18
  5. 顶点6:1→3→6  19

b6787dd8d10c40deb2ffea0e4170f155.png

1.邻接表

  1. v1→v2→v3→v5
  2. v2→v3→v4
  3. v3→v5→v6
  4. v4→v6
  5. v5→v7
  6. v6→v7→v8
  7. v7→v9
  8. v8→v9
  9. v9→NULL

2.16

3.v1→v3→v5→v7→v9

4.a2、a6、a9、a12

668b583220134eb2966cac0b972e1666.png

2.最早发生时间:A0、B0、C3、D3、E2、F3、G6、H6

最晚发生时间:A1、B0、C4、D4、E2、F5、G6、H7

3.关键路径:BEF(通过最晚发生时间减去最早发生时间得到时间余量,时间余量为0组成的路径为关键路径)

最短时间:8

d3a6731b59c94bc783a3f64c153c877f.png

#define MaxVertexNum 100
 
bool visited[MaxVertexNum] = {false};
int temp[MaxVertexNum] = { 0 };
int res[MaxVertexNum] = { 0 };
int maxTime = -1;
 
//DFS函数调用入口
void DFS_Entrance(Grpah G){
    int time = 0;
    //循环遍历visited数组
    for (int i = 0; i < G.verNum; i++){
        //当前元素未被访问过,则访问当前元素
        if (!visited[i]) DFS(G, i, time);
    }
    int k = 0;
    //res数组保存拓扑序列
    for (time = 0; time <= maxTime; time++){
        for (int i = 0; i < verNum; i++){
            if (temp[i] == time) res[k++] = temp[i];
        }
    }
}
 
void DPS(Graph G, int v, int time){
    //更改当前元素为true,标记为已访问
    visited[v] = true;
    temp[v] = time;
    //输出当前元素
    cout << v << endl;
    int w;
    //循环遍历其邻接顶点
    for (w = FirstNeighbor(G, v); w >= 0; w = NextNeighbor(G, v, w)){
        //每执行一次循环,当前层数+1
        time++;
        //更新最高的层数
        if (maxTime < time) maxTime = time;
        if (!visited[w]) DFS(G, w, time);
    }
}

3db217d87865480795f9260d4861e5d2.png

Dijkstra算法能生成一棵生成树,但是并不一定是最小生成树

56b1815be566455b91cd4e1fcb5b8d1a.png

方法不可行

eca83ecb7acc4af4a458e96b7ee41e03.png

关键路径为abdf,长度为16

bd81a95579db4c468249809ac13f951a.png

349abc06805247fdb83aaefa3b73a082.png

1.AD→DE→EC→BC→AB

2.最小生成树唯一

3.带回路的带权连通图其回路的各条边的权值不同

4861978d1b73476e88951241efa5c4c3.png

5d755c9a8a5e4c9e98e0e86176a88880.png

2.邻接表 Dijkstra

相关文章
|
2天前
|
消息中间件 存储 缓存
深入了解队列数据结构:定义、特性和实际应用
深入了解队列数据结构:定义、特性和实际应用
|
2天前
|
存储 算法 程序员
深入探讨栈数据结构:定义、特性和应用
深入探讨栈数据结构:定义、特性和应用
|
1月前
|
存储 算法 Java
深入解析 Java 数据结构:红黑树的特点与应用
红黑树(Red-Black Tree)是一种自平衡的二叉搜索树,它在 Java 编程中扮演着重要的角色,用于高效地存储和管理数据。红黑树的特点使其在查找、插入和删除操作中保持相对平衡,从而提供了稳定且高效的性能。本文将深入探讨红黑树的特点、用法、实现方式以及在实际应用中的优势。
|
1月前
|
存储 缓存 Java
解析 Java 数据结构:深入了解映射(Map)的特点与应用
在 Java 编程中,映射(Map)是一种非常重要的数据结构,用于存储键值对(Key-Value pairs),其中每个键都唯一对应一个值。映射在实际应用中有着广泛的应用,如数据库索引、缓存管理、配置
|
1月前
|
算法 Java 编译器
深入解析 Java 数据结构:栈的特点与应用
在 Java 编程中,栈是一种常见的数据结构,它具有后进先出(LIFO)的特点,适用于许多实际应用场景。栈在算法、编译器、表达式求值等方面有着广泛的应用。本文将深入探讨栈的特点、用法、实现方式以及在实际应用中的优势。
|
1月前
|
存储 算法 Java
探索 Java 数据结构:深入了解队列的特点与应用
在 Java 编程中,队列是一种常见的数据结构,用于存储和管理元素,特别适用于先进先出(FIFO)的数据处理。队列在实际应用中有着广泛的应用,如任务调度、广度优先搜索等。本文将深入探讨队列的特点、用法、实现方式以及在实际应用中的优势。
|
1月前
|
存储 搜索推荐 Java
解析 Java 数据结构:深入探讨数组的特点与应用
在 Java 编程中,数组是最基本且常见的数据结构之一。它允许我们以有序的方式存储相同类型的元素,为数据的组织和访问提供了基础。本文将深入探讨数组的特点、用法、实现方式以及在实际应用中的优势。
|
1月前
|
算法
数据结构之堆的应用
数据结构之堆的应用
23 0
|
1月前
|
Windows
数据结构——栈,队列,及其结构特点应用。2
​✅<1>主页:我的代码爱吃辣 📃<2>知识讲解:数据结构——栈,队列。 🔥<3>创作者:我的代码爱吃辣 ☂️<4>开发环境:Visual Studio 2022 🏡<5>系统环境:windows 10 💬<6>前言:今天来学习一下,数据结构中的栈和队列的实现和应用。
|
1月前
|
Windows
数据结构——栈,队列,及其结构特点应用。1
​✅<1>主页:我的代码爱吃辣 📃<2>知识讲解:数据结构——栈,队列。 🔥<3>创作者:我的代码爱吃辣 ☂️<4>开发环境:Visual Studio 2022 🏡<5>系统环境:windows 10 💬<6>前言:今天来学习一下,数据结构中的栈和队列的实现和应用。
相关产品
机器翻译
推荐文章
更多