在这里,邻接表的实现与深度优先遍历图,使用递归。

#include<iostream>
using namespace std;
#define VERTEXNUM 5//结点数
struct edgenode
{
int to;
int weight; // 边的权值
edgenode *next;
};
struct vnode
{
int from;
edgenode *first;
};
void createGraph(vnode *adjilist, int start, int end,int weight);
void displayGraph(vnode *adjilist,int nodeNum);
void DFT(vnode *adjilist,int* vertexStatusArr,int nodeNum);
void DFTcore(vnode *adjilist,int i,int* vertexStatusArr); int main(void){ //创建图
vnode adjilist[VERTEXNUM];
int nodeNum=VERTEXNUM;
for(int i=0;i<nodeNum;i++)
adjilist[i].first=NULL;
int vertexStatusArr[VERTEXNUM]={0};
cout<<vertexStatusArr[4]<<endl;
createGraph(adjilist,0,3,0);
createGraph(adjilist,0,4,0);
createGraph(adjilist,3,1,0);
createGraph(adjilist,3,2,0);
createGraph(adjilist,4,1,0); printf("after create:\n");
displayGraph(adjilist,nodeNum);
//深度优先遍历
DFT(adjilist,vertexStatusArr,nodeNum);
system("pause");
return 0;
}
//创建图,採取前插法
void createGraph(vnode *adjilist, int start, int end,int weight)
{
adjilist[start].from=start;
edgenode *p=new edgenode;
p->to=end;
p->weight=weight;
p->next=adjilist[start].first;
adjilist[start].first=p;
}
//打印存储的图
void displayGraph(vnode *adjilist,int nodeNum)
{
int i,j;
edgenode *p;
for(i=0;i<nodeNum;i++)
{
p=adjilist[i].first;
while(p)
{
cout<<'('<<adjilist[i].from<<','<<p->to<<')'<<endl;
p=p->next;
}
}
}
//深度优先遍历
void DFT(vnode *adjilist, int* vertexStatusArr,int nodeNum)
{
printf("start BFT graph:\n");
int i;
for(i=0;i<nodeNum;i++){
DFTcore(adjilist,i,vertexStatusArr);
}
printf("\n");
}
void DFTcore(vnode *adjilist,int i,int* vertexStatusArr)
{
if(vertexStatusArr[i] == 1)
return;
printf("%d ",i);
vertexStatusArr[i] = 1;
edgenode *p;
for(p=adjilist[i].first;p;p=p->next)
{
DFTcore(adjilist, p->to, vertexStatusArr);
}
}

时间复杂度O(V+E)。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

深度-first遍历图--邻接表实现的更多相关文章

  1. 图 邻接表 邻接矩阵 BFS生成树 DFS生成树

  2. 图的dfs遍历模板(邻接表和邻接矩阵存储)

    我们做算法题的目的是解决问题,完成任务,而不是创造算法,解题的过程是利用算法的过程而不是创造算法的过程,我们不能不能陷入这样的认识误区.而想要快速高效的利用算法解决算法题,积累算法模板就很重要,利用模 ...

  3. 邻接表存储图,DFS遍历图的java代码实现

    import java.util.*; public class Main{ static int MAX_VERTEXNUM = 100; static int [] visited = new i ...

  4. c++邻接表存储图(无向),并用广度优先和深度优先遍历(实验)

    一开始我是用c写的,后面才发现广搜要用到队列,所以我就直接使用c++的STL队列来写, 因为不想再写多一个队列了.这次实验写了两个多钟,因为要边写边思考,太菜了哈哈. 主要参考<大话数据结构&g ...

  5. PTA 邻接表存储图的广度优先遍历(20 分)

    6-2 邻接表存储图的广度优先遍历(20 分) 试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(V ...

  6. 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)

    一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...

  7. 数据结构作业——图的存储及遍历(邻接矩阵、邻接表+DFS递归、非递归+BFS)

    邻接矩阵存图 /* * @Author: WZY * @School: HPU * @Date: 2018-11-02 18:35:27 * @Last Modified by: WZY * @Las ...

  8. PTA 邻接表存储图的广度优先遍历

    试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ) 其中LGraph是邻接表存储的 ...

  9. 图的bfs遍历模板(邻接矩阵存储和邻接表存储)

    bfs遍历图模板伪代码: bfs(u){ //遍历u所在的连通块 queue q; //将u入队 inq[u] = true; while (q非空){ //取出q的队首元素u进行访问 for (从u ...

随机推荐

  1. OCP解决问题053-16 MEMORY_TARGET

    16.Setting which of the following initialization parameters enables Automatic Memory Management? A. ...

  2. Dictionary带来的一种隐式内存泄漏

    当心Dictionary带来的一种隐式内存泄漏 最近在看Dictionary的源代码的时候, 突然想到Dictionary的不当使用中有一种隐含内存泄漏的可能. 简化使用场景 小A正在写一个简单的图书 ...

  3. Android搜索芽发展clientVersion1.0结束(过程和结果显示)

    本文原:http://blog.csdn.net/minimicall 转载标明. 博士生.找我,我希望有一个合作伙伴.为了帮助他解决了移动终端产品.他给了我他的想法的叙述性说明,搜索布.要搜索布图像 ...

  4. EL与JSTL注意事项汇总

    EL使用表达式(5一个 问题) JSTL使用标签(5问题) 什么是EL.它可以用做? EL全名Expression Language在JSP使用页面 格公式${表达式} 样例${requestScop ...

  5. 【C语言探索之旅】 第二部分第三课:数组

    内容简介 1.课程大纲 2.第二部分第三课: 数组 3.第二部分第四课预告:字符串 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语 ...

  6. 【C语言探索之旅】 第一部分第八课:第一个C语言小游戏

    ​ 内容简介 1.课程大纲 2.第一部分第八课:第一个C语言小游戏 3.第一部分第九课预告: 函数 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写 ...

  7. StackExchange.Redis 使用 (一)

    在StackExchange.Redis中最重要的对象是ConnectionMultiplexer类, 它存在于StackExchange.Redis命名空间中.这个类隐藏了Redis服务的操作细节, ...

  8. OSChina 的URL类的源代码重写过程

    此代码是 oschina 到手柄形状像 http://www.oschina.net/p/tomcat 这种URL 此类已经废弃,改用 http://www.oschina.net/code/snip ...

  9. 解决一bug的流程复盘

    听同事说有一个功能不好使了,当时有事,过了一段时间来看看这个bug 解决问题时,看的是老的日志,根据老日志看来看去没有发现问题,觉得很困惑 然后手动执行了一下,发现问题没有重现.与另一个团队的同事沟通 ...

  10. main真正的形状函数

    我们经常使用的像 int main()这种形式,但main长身体机能完全到底是什么样子? 以下这个main函数的形式可能有些出乎我们的意料: int main(int argc, char *argv ...