深度-first遍历图--邻接表实现
2024-09-18 00:08:04
在这里,邻接表的实现与深度优先遍历图,使用递归。
#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)。
版权声明:本文博客原创文章。博客,未经同意,不得转载。
最新文章
- Missing Push Notification Entitlement 问题
- JavaScript使用封装
- 修改tomcat服务器banner的方法
- 使用 PowerShell 自动登录Azure
- Java for XML: JAXP、JAXB、JAXM、JAX-RPC、JAX-WS
- json和xml数据的解析
- 下一代大数据系统和4S标准
- Linux操作系统下三种配置环境变量的方法——转载
- tstring
- 《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅵ
- Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表)
- CentOS-6.6下Tomcat-7.0安装与配置(Linux)
- VNC实现Windows远程访问Ubuntu 16.04(无需安装第三方桌面)
- Linux系统内存占用90%以上——解决方法
- openstack搭建之-nova配置(10)
- 2019年春季学期第四周作业Compile Summarize
- Spring事务操作介绍
- 【算法】LeetCode算法题-Maximum Subarray
- 软硬连接ln
- pandas 导入导出
热门文章
- CKEditor上传插件
- [Servlet3.0新功能]注释替代配置文件
- java: org.luaj.vm2.LuaError:XXX module not found lua脚本初始化出错(转)
- JAVA card 应用程序开发(七) JAVA 卡数据(永久数据/)时间数据
- Java的λ表达(lambda)
- VS2010使整个过程说明了安装包
- 3D数学--学习笔记(五岁以下儿童):总结一些概念(避免遗忘!)
- Calendar计算日期
- Linux删除以破折号开头的文件Windows在批处理文件来删除隐藏属性
- HDU 3103 Shoring Up the Levees(计算几何 搜寻区域)