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. 数据结构-图的进阶代码

    1.BFS算法求解单源最短路径(BFS总是按照距离由近到远来遍历) #define MAX_VERTEX_NUM 1024 #define INFINITY 0 bool visited[MAX_VE ...

  2. 数据结构-树的基础代码

    1.树的先序遍历-递归 void PreOrder(BiTree T){if(T!=NULL){visit(T);PreOrder(T->lchild);PreOrder(T->rchil ...

  3. C++基础代码--20余种数据结构和算法的实现

    C++基础代码--20余种数据结构和算法的实现 过年了,闲来无事,翻阅起以前写的代码,无意间找到了大学时写的一套C++工具集,主要是关于数据结构和算法.以及语言层面的工具类.过去好几年了,现在几乎已经 ...

  4. 数据结构-排序基础代码

    数据结构-排序基础代码 1.快排的递归算法: void QuickSort(int A[],int n){Qsort(A,0,n-1); } void Qsort(int A[],int left,i ...

  5. python数据结构与算法知识点_数据结构和算法基础知识点(示例代码)

    数据结构和算法基础知识点 链表 1.链表是一种由节点组成的线性数据集合,每个节点通过指针指向下一个节点.它是 一种由节点组成,并能用于表示序列的数据结构. 2.单链表:每个节点仅指向下一个节点,最后一 ...

  6. 数据结构——图详解及代码实现

    引言 大家都玩过微博和微信吧,微博的互关和微信互相添加好友,你知道如何存储这些关系吗?没错,就是我们今天要聊的数据结构"图". 如何理解图 图跟二叉树一样是一种非线性的数据结构,但 ...

  7. 数据结构:图的基础知识

    文章目录 图 图论基础 图的定义 图的基本概念 图的存储结构 邻接矩阵 邻接表 图的创建和销毁* 图的遍历算法 深度优先搜索遍历(DFS) 广度优先搜索遍历(BFS) 最小生成树 Prim 算法 Kr ...

  8. 数据结构--图(Graph)详解(一)

    数据结构–图(Graph)详解(一) 文章目录 数据结构--图(Graph)详解(一) 一.图的基本概念 1.图的分类 2.弧头和弧尾 3.入度和出度 4.(V1,V2) 和 < V1,V2 & ...

  9. 【数据结构(C语言)】数据结构-图

    图 文章目录 图 一.基本概念 1.图的定义 2.约定符号 3.分类 4.子图 5.路 6.其他术语 7.ADT 二.存储结构 1.邻接矩阵(数组) 2.邻接表 三.基本算法 1.遍历 2.求无向图的 ...

最新文章

  1. React Native组件开发指南
  2. 中国水环境治理市场需求前景与十四五战略规划建议报告2022版
  3. Dozer 使用总结
  4. cocos2dx 3.0 windows平台 中文乱码解决
  5. matplotlib给坐标轴特定的位置加上文字
  6. python有什么用-python是什么意思?python有什么用?
  7. MOne︱基于词包的无监督多主题得分 练习题
  8. 加速爬虫:异步加载asyncio
  9. 论文指导教师评语计算机,毕业论文指导教师评语
  10. Oracle 12c 数据库基础教程
  11. 从细节入手为您的客户创造价值
  12. USB PD快速充电通信原理
  13. html插入动态背景,HTML 动态背景
  14. Jetson 配置中文环境,中文输入法,安装QQ
  15. 5.10 在简单的背景下检测斑点
  16. 微信文件七天失效?微信文件轻松备份到自己的印象笔记、onedrive
  17. Linux进程多导致CPU卡死的问题
  18. 本特利Bently Nevada 330180-91-05 本特利传感器
  19. linux kernel网络驱动
  20. windows8下无线频繁掉线,修复为“默认网关不可用”的解决方案

热门文章

  1. 叫做 Nanshan即时通讯 贪婪型
  2. 一进庙会freeeim
  3. 后面的 飞鸽传书 l代表lock
  4. 飞鸽传书(http://www.freeeim.com)软件下载
  5. 03MFC的ODBC类简介
  6. 36Kr鬼畜推送,没事别惹程序员
  7. 第七节:实战前必须掌握的10个指令(上)
  8. mysql 索引 测试_mysql的索引测试
  9. mac android 证书生成工具,MAC系统下,生成安卓证书的命令
  10. STM32----摸石头过河系列(三)