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

#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)。

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

最新文章

  1. Missing Push Notification Entitlement 问题
  2. JavaScript使用封装
  3. 修改tomcat服务器banner的方法
  4. 使用 PowerShell 自动登录Azure
  5. Java for XML: JAXP、JAXB、JAXM、JAX-RPC、JAX-WS
  6. json和xml数据的解析
  7. 下一代大数据系统和4S标准
  8. Linux操作系统下三种配置环境变量的方法——转载
  9. tstring
  10. 《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅵ
  11. Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表)
  12. CentOS-6.6下Tomcat-7.0安装与配置(Linux)
  13. VNC实现Windows远程访问Ubuntu 16.04(无需安装第三方桌面)
  14. Linux系统内存占用90%以上——解决方法
  15. openstack搭建之-nova配置(10)
  16. 2019年春季学期第四周作业Compile Summarize
  17. Spring事务操作介绍
  18. 【算法】LeetCode算法题-Maximum Subarray
  19. 软硬连接ln
  20. pandas 导入导出

热门文章

  1. CKEditor上传插件
  2. [Servlet3.0新功能]注释替代配置文件
  3. java: org.luaj.vm2.LuaError:XXX module not found lua脚本初始化出错(转)
  4. JAVA card 应用程序开发(七) JAVA 卡数据(永久数据/)时间数据
  5. Java的λ表达(lambda)
  6. VS2010使整个过程说明了安装包
  7. 3D数学--学习笔记(五岁以下儿童):总结一些概念(避免遗忘!)
  8. Calendar计算日期
  9. Linux删除以破折号开头的文件Windows在批处理文件来删除隐藏属性
  10. HDU 3103 Shoring Up the Levees(计算几何 搜寻区域)