https://www.cnblogs.com/kangjianwei101/p/5244218.html
https://wenku.baidu.com/view/a31a5ba1284ac850ad0242d8.html

1


什么是连通图,(强)连通图详解:http://c.biancheng.net/view/3405.html
https://blog.csdn.net/weixin_43843835/article/details/88381828
课本p161

7


普利姆p173 顶点–找最小边的点–把顶点加入
克鲁斯卡尔p175
https://blog.csdn.net/a2392008643/article/details/81781766

9 拓扑序列

https://blog.csdn.net/weixin_46072771/article/details/106646721

10 关键路径

https://blog.csdn.net/weixin_46072771/article/details/106673063


11 DIJKSTRA

https://blog.csdn.net/weixin_46072771/article/details/106654848

13 FLOYD

https://blog.csdn.net/weixin_46072771/article/details/106654848

22 DFS,存储

试基于图的深度优先搜索策略写一算法,判别以邻接表方式存储的有向图中是否存在由顶点vi到顶点vj的路径(i≠j)。注意:算法中涉及的图的基本操作必须在此存储结构上实现。
https://www.codeleading.com/article/32714582577/
https://www.shangmayuan.com/a/4a32db9769b94135ad0f76ae.html
ZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hhbjI5Xw==,size_16,color_FFFFFF,t_70)

#include <stdio.h>
#include <stdlib.h>
#define INFINITY INT_MAX //最大值,正无穷
#define MaxVertexNum 20 //最大顶点数
#define DateType int
int visted[MaxVertexNum];//辅助数组
//typedef enum{DG,DN,UDG,UDN}GrapKind; //{有向图,有向网,无向图,无向网}typedef struct ArcNode//边表
{int adjvex;//顶点ArcNode* nextarc;//下一条弧int info;//权重
}ArcNode;typedef struct VNode
{DateType vertex;ArcNode* firstarc;
}VNode,AdiList[MaxVertexNum];typedef struct
{AdiList vertices;int vexnum, arcnum;
}ALGraph;int existDFS(ALGraph G, int i, int j)
{int k;ArcNode* p;if (i == j)return 1;else{//记得提前初始化visted为0visted[i] = 1;for (p = G.vertices[i].firstarc; p; p = p->nextarc){k = p->adjvex;if (!visted[k] && existDFS(G, k, j))return 1;//为什么还要visited,是因为题目要求DFS}}return 0;
}

。。。

#include <stdio.h>
#include <stdlib.h>//图的邻接表存储
#define MAX_VERTEX 20
typedef struct ArcNode
{int adjvex;//该弧所指向的顶点的位置struct ArcNode* nextarc;int* info; //该弧所相关信息的指针
};
typedef struct VNode
{int data;//顶点信息ArcNode* firstarc;
}VNode, AdjList[MAX_VERTEX];
typedef struct
{AdjList vertices;int vexnum, arcnum;//图的当前顶点数和弧数int kind;//图的种类标志
}ALGraph;int visited[MAX_VERTEX];//指示顶点是否在当前道路上
int level = 1;//递归进行的层数
int exist_path_DFS(ALGraph G, int i, int j)
{int k;ArcNode* p;if (i == j)//相同返回真return 1;//不同就标记visited[i]else{visited[i] = 1;for (p = G.vertices[i].firstarc; p != NULL; p = p->nextarc, level--;){level++;k = p->adjvex;if (!visited[k] && exist_path_DFS(G, k, j))return 1;}}if (level == 1)return 0;
}

23 BFS 深度

同7.22题要求。试基于图的广度优先搜索策略写一算法。

#include <stdio.h>
#include <stdlib.h>
#define INFINITY INT_MAX //最大值,正无穷
#define MaxVertexNum 20 //最大顶点数
#define DateType int
int visited[MaxVertexNum];//辅助数组
//typedef enum{DG,DN,UDG,UDN}GrapKind; //{有向图,有向网,无向图,无向网}typedef struct ArcNode//边表
{int adjvex;//顶点ArcNode* nextarc;//下一条弧ArcNode* info;//该弧
}ArcNode;typedef struct VNode
{DateType vertex;ArcNode* firstarc;
}VNode,AdiList[MaxVertexNum];typedef struct
{AdiList vertices;int vexnum, arcnum;
}ALGraph;//队列结点的结构
typedef struct Qnode
{int data;struct Qnode* next;
}Qnode,*QuequePrt;//链表队列结构
typedef struct
{QuequePrt front;//队头指针QuequePrt rear;
}LinkQueue;//初始化队列
void InitQueue(LinkQueue& Q)
{Q.front = Q.rear = new Qnode;//生成新的结点作为头结点,初始化队头队尾指针Q.front->next = NULL;//头结点的指针域为空
}bool EnQueue(LinkQueue& Q, int e)
{Qnode* p = new Qnode;p->data = e;Q.rear->next = p;Q.rear = p;return 1;
}bool DeQueue(LinkQueue& Q, int & e)
{Qnode* p = new Qnode;//保存头结点指针,用于释放空间p = Q.front->next;//指向队头结点e = p->data;//获取队头结点的元素的值Q.front->next = p->next;//修改头指针if (Q.rear == p)//判断删除的元素是否为最后一个元素,避免空指针异常,将队尾指针重新指向队头指针Q.rear = Q.front;Q.rear->next = Q.front->next;//最后一个结点指向首元结点delete p;return 1;
}void DeleteQueue(LinkQueue& Q)
{while (Q.front){Q.rear = Q.front->next;delete Q.front;Q.front = Q.rear;}
}//广度遍历函数
int BFS(ALGraph G, int i,int j)
{LinkQueue Q;InitQueue(Q);visited[i] = 1;EnQueue(Q, i);while (Q.front != Q.rear){int u;DeQueue(Q, u);ArcNode* p = G.vertices[u].firstarc;//获取被访问顶点的边链表的首元结点的指针while (p){int w = p->adjvex;//获取v顶点的邻接顶点if (w == j)return 1;else if (!visited[w])//判断该顶点是否被访问过{visited[w] = 1;EnQueue(Q, w);}p = p->nextarc;//指向顶点的下一个邻接点}}return 0;
}//操作函数
void BFS_Traverse(ALGraph G) {//访问标志辅助数组初始化for (int i = 0; i < G.vexnum; i++){visited[i] = false;}int i,j;printf("请输入起点和终点:");scanf("%d %d", &i, &j);BFS(G, i, j);
}

//复制的Status DfsReachable(ALGraph g, int i, int j){ArcNode *p;Queue Q;int e,k;InitQueue(Q);EnQueue(Q,i);while(!QueueEmpty(Q)){DeQueue(Q,e);visited[e] = TRUE;//标记被访问过的顶点p = g.vertices[e].firstarc; for(; p != NULL; p = p -> nextarc){k = p -> adjvex;//当前弧所指向顶点的位置if(k == j) return OK;else if(!visited[k])//当前顶点未被访问过EnQueue(Q,k);}}return ERROR;}                                                   

27 邻接表

https://www.freesion.com/article/64991243006/
采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径的算法(一条路径为简单路径指的是其顶点序列中不含有重现的顶点)。

#include <stdio.h>
#include <stdlib.h>
#define INFINITY INT_MAX //最大值,正无穷
#define MaxVertexNum 20 //最大顶点数
#define DateType int
int visited[MaxVertexNum];//辅助数组
//typedef enum{DG,DN,UDG,UDN}GrapKind; //{有向图,有向网,无向图,无向网}typedef struct ArcNode//边表
{int adjvex;//顶点ArcNode* nextarc;//下一条弧ArcNode* info;//该弧
}ArcNode;typedef struct VNode
{DateType vertex;ArcNode* firstarc;
}VNode,AdiList[MaxVertexNum];typedef struct
{AdiList vertices;int vexnum, arcnum;
}ALGraph;int exist_path_len(ALGraph G, int i, int j, int k)
//判断邻接表方式存储的有向图G的顶点i到j是否存在长度为k的简单路径
{ArcNode *p;int m;if (i == j && k == 0) return 1; //找到了一条路径,且长度符合要求 else if (k > 0){visited[i] = 1;for (p = G.vertices[i].firstarc; p != NULL; p = p->nextarc){m = p->adjvex;if (!visited[m])if (exist_path_len(G, m, j, k - 1)) return 1; //剩余路径长度减一 }//for visited[i] = 0; //本题允许曾经被访问过的结点出现在另一条路径中 //这里需要把已经访问的点重新置为0,因为如果当前不存在长度为k//到达j点,那么这个点还是可以使用的,因为有可能从其他点出发//可以到达j点并且长度为k }//else return 0; //没找到
}//exist_path_lenvoid judge(ALGraph G)
{int i, j, k;//访问标志辅助数组初始化for (int i = 0; i < G.vexnum; i++){visited[i] = false;}printf("输入起点、终点和长度: ");scanf("%d %d %d", &i, &j, &k);int m=exist_path_len(G, i, j, k);if (m)printf("找到路径!");elseprintf("没有找到路径!");
}

34 拓扑

邻接矩阵:https://www.nowcoder.com/questionTerminal/c01b85c5a67a4a408bad2e95a40d3e67
邻接表:https://www.cnblogs.com/kangjianwei101/p/5296563.html
栈:https://www.cnblogs.com/kangjianwei101/p/5225684.html
试编写一个算法,给有向无环图G中每个顶点赋以一个整数序号,并满足以下条件:若从顶点i至顶点j有一条弧,则应使i<j。

#include <stdio.h>
#include <stdlib.h>
#define INFINITY INT_MAX //最大值,正无穷
#define MaxVertexNum 20 //最大顶点数
#define STACK_SIZE 20 //存储空间初始分配量
typedef int DateType;
typedef int SElemType;
int visited[MaxVertexNum];//辅助数组
//typedef enum{DG,DN,UDG,UDN}GrapKind; //{有向图,有向网,无向图,无向网}typedef struct ArcNode//边表
{int adjvex;//顶点ArcNode* nextarc;//下一条弧int info;//该弧的权重
}ArcNode;typedef struct VNode
{DateType vertex;ArcNode* firstarc;
}VNode,AdiList[MaxVertexNum];typedef struct
{AdiList vertices;int vexnum, arcnum;
}ALGraph;//栈的顺序存储表示
typedef struct
{SElemType* base;//在栈构造之前和销毁之后,base的值为NULLSElemType* top;//栈顶指针int stacksize;//当前已分配的存储空间,以元素为单位
}SqStack;void InitStack_Sq(SqStack& s)
{s.base = (SElemType*)malloc( STACK_SIZE* sizeof(SElemType));}void Push_Sq(SqStack& s, SElemType e)
{}void Pop_Sq(SqStack& s, SElemType& e)
{}int StackEmpty_Sq(SqStack& S)
{}void FindInDegree(ALGraph G, int indegree[])
//写数组,传的是首地址,所以也不用写[]
{int i, m;ArcNode* p;for (i = 1; i < G.vexnum; i++)indegree[i] = 0;for (i = 0; i < G.vexnum; i++){p = G.vertices[i].firstarc;m = G.vertices[i].vertex;while(p){indegree[m]++;p = p->nextarc;}}
}int T_34(ALGraph G, int T[])//数组Topo存储拓扑序列
{int n = G.vexnum;SqStack S;ArcNode* p;int i, k, count, indegree[MaxVertexNum];FindInDegree(G, indegree);InitStack_Sq(S);for (i = 0; i < G.vexnum; i++){if (!indegree[i])Push_Sq(S, i);}count = 0;while (!StackEmpty_Sq(S)){Pop_Sq(S, i);T[count] = i;i++;for (p = G.vertices[i].firstarc; p; p = p->nextarc){k = p->adjvex;if (!(--indegree[k]))//对i号顶点的每个邻接点的入度减一Push_Sq(S, k);}}if (count < G.vexnum)return 0;elsereturn 1;
}

42 邻接表 Dijkatra

https://blog.csdn.net/gdyhvy/article/details/107807897
以邻接表作存储结构实现求从源点到其余各顶点的最短路径的Dijkstra算法。

#include <stdio.h>
#include <stdlib.h>
#define INFINITY INT_MAX //最大值,正无穷
#define MaxVertexNum 20 //最大顶点数
#define DateType int
int visited[MaxVertexNum];//辅助数组
//typedef enum{DG,DN,UDG,UDN}GrapKind; //{有向图,有向网,无向图,无向网}typedef struct ArcNode//边表
{int adjvex;//顶点ArcNode* nextarc;//下一条弧int info;//该弧的权重
}ArcNode;typedef struct VNode
{DateType vertex;ArcNode* firstarc;
}VNode,AdiList[MaxVertexNum];typedef struct
{AdiList vertices;int vexnum, arcnum;
}ALGraph;int findMinDist(int dist[], int s[], int n)
{int min, k=0;for (int i = 0; i < n; i++){if (s[i] == 0){if (k == 0)min = dist[i];else{min = (min > dist[i]) ? dist[i] : min;}k++;}}return k;
}void ShortestPath(ALGraph G, int v0)
{int n = G.vexnum;//顶点个数int dist[MaxVertexNum], path[MaxVertexNum], s[MaxVertexNum];//初始化上面数组for (int i = 0; i < n; i++){s[i] = 0;dist[i] = INFINITY;path[i] = -1;}s[v0] = 1;//顶点放入集合S, 1代表在集合中,0代表不在集合中ArcNode* p;for (p = G.vertices[v0].firstarc; p; p = p->nextarc){int v = p->adjvex;//顶点int w = p->info;//权值path[v] = v0;dist[v] = w;}int num = 1;int min, m, k;while (num <= n)//当顶点数num小于图的顶点数{min = findMinDist(dist, s, n);//在dist中查找s[i]为0的最小值s[min] = 1;//将新生成的终点加入集合S//修改dist和pathfor (p = G.vertices[min].firstarc; p; p = p->nextarc){int v = p->adjvex;//顶点int w = p->info;//权值int sum = dist[v] + p->info;if ((s[v] == 0) && (dist[v] > sum)){dist[v] = sum;//用已经找到的最短路径修改对应的distpath[v] = min;//用已经找到的最短路径修改对应的path}}num++;}
}

严蔚敏数据结构习题第七章相关推荐

  1. 严蔚敏数据结构习题第六章

    https://www.cnblogs.com/kangjianwei101/p/5243404.html 目录 36-47 二叉树 6.3,6.5,6.6,6.10,6.13,6.14,6.19,6 ...

  2. 严蔚敏数据结构习题第九章

    l第九章查找作业题目9.9 9.14 9.19 9.25 9.31 9.33,平台提交入口已开通,截止日期6月20日 https://www.cnblogs.com/kangjianwei101/p/ ...

  3. c语言实现bf算法的定位函数,数据结构c语言版严蔚敏清华大学出版社第四章串.ppt...

    数据结构c语言版严蔚敏清华大学出版社第四章串 模式匹配(定位) 设有主串S和子串T(将S称为目标串,将T称为模式串),在主串S中,从位置start开始查找,如若在主串S中找到一个与子串T相等的子串,则 ...

  4. 严蔚敏数据结构源码及习题解析

    ⭐ 我的网站: www.mengyingjie.com ⭐ 严蔚敏数据结构源码及习题解析 习题解析未更新完整,以后更新 内容已上传到github,欢迎star和fork: https://github ...

  5. 《数据结构(C语言版)》严巍敏课件~第七章:图

    <数据结构(C语言版)>严巍敏课件-第七章:图

  6. KMP算法-严蔚敏数据结构

    KMP 算法是 D.E.Knuth.J,H,Morris 和 V.R.Pratt 三位神人共同提出的,称之为 Knuth-Morria-Pratt 算法,简称 KMP 算法.该算法相对于 Brute- ...

  7. 计算机应用基础第七章自测题,计算机应用基础习题第七章.doc

    计算机应用基础习题第七章 第7章 如何使用 WinRAR 快速压缩当您在文件上点右键的时候,您就会看见图 中的部分就是 WinRAR 在右键中创建的快捷键. ? 图 右键菜单 想压缩文件的时候,在文件 ...

  8. 广工 AnyviewC 数据结构习题 第四章

    广工 AnyviewC 数据结构习题 第四章 广工 AnyviewC 数据结构习题 第四章 1[题目]已知某哈希表的装载因子小于1,哈希函数H(key) 2[题目]假设哈希表长为m,哈希函数为H(x) ...

  9. 广工 AnyviewC 数据结构习题 第五章

    广工 AnyviewC 数据结构习题 第五章 广工 AnyviewC 数据结构习题 第五章 1[题目]试编写如下定义的递归函数的递归算法: 2[题目]试写出求递归函数F(n)的递归算法: 3[题目]求 ...

  10. 数据结构 习题 第五章 多维数组和广义表 (C语言描述)

    最近在复习数据结构,所以想把平时上课做的习题做个总结,如果大家有遇到这方面的问题就可以参考一下了,废话不多说,直接开始吧. 1.单选题 稀疏矩阵一般的压缩存储方法有两种,即( D) A. 二维数组和三 ...

最新文章

  1. python---django中权限框架设计
  2. [BZOJ4182]Shopping
  3. (软件工程复习核心重点)第二章可行性研究习题
  4. leetcode344题:反转字符串
  5. typescript 方法后面加感叹号_typescript专题(四) 「泛型」
  6. Python进阶(十二)常用数据处理模块
  7. Ruby的case语句
  8. 正态分布里的西格玛_七大数据陷阱之油腻的统计学:正态分布来了
  9. Oracle 使用 PL/SQL Developer 生成 AWR 报告
  10. Qt下使用GDB远程调试ARM板
  11. 《周一清晨的领导课》--司机与乘客 - [读书笔记]
  12. 通过物理地址查计算机,别人知道我查电脑的物理地址,怎么处理
  13. ept技术_每天5分钟跟我一起学电气之EPT的原理
  14. 服务器摆放需要预留U位么_客厅沙发摆放正确,让你一年都风调雨顺,财源滚滚来...
  15. SQL Server Note [vaynexiao]
  16. 弘辽科技:白象方便面也被野性消费了吗?
  17. 云计算技术基础期末复习
  18. cento网络故障:Job for network.service failed because the control process exited with error code. See sy
  19. 与OneNote 2007共享OneNote 2010笔记本
  20. 抖音评论采集接口_抖音接口

热门文章

  1. 阶乘的计算java_java计算阶乘
  2. 软件测试(三)——软件测试用例篇
  3. net framework 4.0安装未成功,原因是?
  4. 技术指南 | 使用 mPaaS 配置 SM2 国密加密指南
  5. Jupyter notebook切换python版本
  6. C语言编译软件安装教程(Dev-C++版)
  7. VScode插件C/C++ Project Generator产生的Makefile模板
  8. java核心技术卷一适合初学者吗_为什么我觉得Java核心技术卷一写的不好呢?
  9. Java入门基础知识
  10. xlsx文件打开乱码_excel打开xls文件全是乱码怎么办?excel打开xls乱码的修复方法