数据结构-图的基础代码
1.深度优先搜索(DFS)
启动函数:
#define MAX_VERTEX_NUM 1024
bool visited[MAX_VERTEX_NUM];
void DFSTraverse(Graph G){for(int v=0;v<G.vexnum;v++)visited[v]=FALSE;for(int v=0;v<G.vexnum;v++)if(!visited[v])DFS(G,v);
}
递归函数:
void DFS(Graph G,int v){visit(v); //函数visit用于访问顶点v的相关信息,获取某信息,在此不细写visited[v]=TRUE;for(int w=FirstNeighbor(G,v);w>=0;w=NextNeighor(G,v,w))if(!visited[w])DFS(G,w);
}
1.广度优先遍历(BFS)
启动函数:
#define MAX_VERTEX_NUM 1024
bool visited[MAX_VERTEX_NUM];void BFSTraverse(Graph G){for(int i=0;i<G.vexnum;i++)visited[i]=FALSE;InitQueue(Q);for(int i=0;i<G.vexnum;i++)if(!visited[i])BFS(G,i);
};
BFS函数:
void BFS(Graph G,int v){visit(v);visited[v]=TRUE;Enqueue(Q,v);while(!isEmpty(Q)){DeQueue(Q,v);for(w=FirstNeighbor(G,v);w>=0;w=NextNeighbor(G,v,w)){if(!visited[w]){visit(w);visited[w]=TRUE;EnQueue(Q,w);}}}
}
3.设已给出图的邻接矩阵,要求将邻接矩阵转换为邻接表
#define MAX_VERTEX_NUM 1024
#define INFINITY -65535
void MGraphToALGraph(MGraph MG,ALGraph *ALG){ALG->vexnum=MG.vexnum;ALG->rcnum=MG.arcnum;for(int i=0;i<ALG->vexnum;i++){(ALG->vertices+i)->first=NULL;(ALG->vertices+i)->data=i;}for(int i=0;i<MG.exnum;i++){for(int j=0;j<MG.exnum;j++){if(MG.Edge[i][j]!=INFINITY){ArcNode *p=new ArcNode;p->data=j;p->next=(ALG->vertices+i)->frist; //头插法(ALG->vertices+i)->frist=p;}}}
}
4.设已给出图的邻接表,图有n个顶点,表示为1至n,试写一个算法求顶点k的入度(1<k<n)
int CountInDegree(ALGraph *G,int k){int Indegree=0;for(int i=0;i<G->vexnum;i++){ ArcNode *p=(G->vertices+i)->first;while(p){if(p->adjvex==k)Indegree++;p=p->next;}}return Indegree;
}
5.有一个有向无环图的根节点R通过他出发的所有有向路径可以到达图的任意一个节点。设计算法使一个有向图作为输入假如此有向无环图有根,确认图的根节点。
#define MAX_VERTEX_NUM 1024
bool visited[MAX_VERTEX_NUM];
int GetRoot(MGgraph *G){for(int i=0;i<G.vexnum;i++){for(int j=0;j<G.vexnum;j++)visited[j]=FALSE;DFS(G,i);int vextLabel=0;for(int j=0;j<G.vexnum;j++){if(!visited[j])break;vexLabel++;}if(vexLabel==G.vexnum)return i;}
}
void DFS(Graph G,int v){visit(v); //函数visit用于访问顶点v的相关信息,获取某信息,在此不细写visited[v]=TRUE;for(int w=FirstNeighbor(G,v);w>=0;w=NextNeighor(G,v,w))if(!visited[w])DFS(G,w);
}
数据结构-图的基础代码相关推荐
- 数据结构-图的进阶代码
1.BFS算法求解单源最短路径(BFS总是按照距离由近到远来遍历) #define MAX_VERTEX_NUM 1024 #define INFINITY 0 bool visited[MAX_VE ...
- 数据结构-树的基础代码
1.树的先序遍历-递归 void PreOrder(BiTree T){if(T!=NULL){visit(T);PreOrder(T->lchild);PreOrder(T->rchil ...
- C++基础代码--20余种数据结构和算法的实现
C++基础代码--20余种数据结构和算法的实现 过年了,闲来无事,翻阅起以前写的代码,无意间找到了大学时写的一套C++工具集,主要是关于数据结构和算法.以及语言层面的工具类.过去好几年了,现在几乎已经 ...
- 数据结构-排序基础代码
数据结构-排序基础代码 1.快排的递归算法: void QuickSort(int A[],int n){Qsort(A,0,n-1); } void Qsort(int A[],int left,i ...
- python数据结构与算法知识点_数据结构和算法基础知识点(示例代码)
数据结构和算法基础知识点 链表 1.链表是一种由节点组成的线性数据集合,每个节点通过指针指向下一个节点.它是 一种由节点组成,并能用于表示序列的数据结构. 2.单链表:每个节点仅指向下一个节点,最后一 ...
- 数据结构——图详解及代码实现
引言 大家都玩过微博和微信吧,微博的互关和微信互相添加好友,你知道如何存储这些关系吗?没错,就是我们今天要聊的数据结构"图". 如何理解图 图跟二叉树一样是一种非线性的数据结构,但 ...
- 数据结构:图的基础知识
文章目录 图 图论基础 图的定义 图的基本概念 图的存储结构 邻接矩阵 邻接表 图的创建和销毁* 图的遍历算法 深度优先搜索遍历(DFS) 广度优先搜索遍历(BFS) 最小生成树 Prim 算法 Kr ...
- 数据结构--图(Graph)详解(一)
数据结构–图(Graph)详解(一) 文章目录 数据结构--图(Graph)详解(一) 一.图的基本概念 1.图的分类 2.弧头和弧尾 3.入度和出度 4.(V1,V2) 和 < V1,V2 & ...
- 【数据结构(C语言)】数据结构-图
图 文章目录 图 一.基本概念 1.图的定义 2.约定符号 3.分类 4.子图 5.路 6.其他术语 7.ADT 二.存储结构 1.邻接矩阵(数组) 2.邻接表 三.基本算法 1.遍历 2.求无向图的 ...
最新文章
- React Native组件开发指南
- 中国水环境治理市场需求前景与十四五战略规划建议报告2022版
- Dozer 使用总结
- cocos2dx 3.0 windows平台 中文乱码解决
- matplotlib给坐标轴特定的位置加上文字
- python有什么用-python是什么意思?python有什么用?
- MOne︱基于词包的无监督多主题得分 练习题
- 加速爬虫:异步加载asyncio
- 论文指导教师评语计算机,毕业论文指导教师评语
- Oracle 12c 数据库基础教程
- 从细节入手为您的客户创造价值
- USB PD快速充电通信原理
- html插入动态背景,HTML 动态背景
- Jetson 配置中文环境,中文输入法,安装QQ
- 5.10 在简单的背景下检测斑点
- 微信文件七天失效?微信文件轻松备份到自己的印象笔记、onedrive
- Linux进程多导致CPU卡死的问题
- 本特利Bently Nevada 330180-91-05 本特利传感器
- linux kernel网络驱动
- windows8下无线频繁掉线,修复为“默认网关不可用”的解决方案