图的深度优先遍历--邻接表实现
来源:互联网 发布:vs2010 优化选项 编辑:程序博客网 时间:2024/05/19 18:13
这里用邻接表实现图的深度优先遍历,采用递归实现。
#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)。
7 0
- 图的深度优先遍历--邻接表实现
- 图算法:1、邻接表实现图的深度优先遍历,广度优先遍历
- 图的邻接表存储 深度优先遍历 广度优先遍历 C语言实现
- 图的邻接表存储 深度优先遍历 广度优先遍历 C语言实现
- 邻接表实现--图的深度优先遍历DFS和广度优先遍历BFS
- 邻接表-图的遍历-广度和深度优先遍历
- 建立图的邻接表储存并实现深度优先和广度优先遍历
- 基于邻接表的深度优先遍历
- 图的邻接表存储下的深度优先遍历
- 邻接图的广度优先遍历和深度优先遍历
- 邻接表的深度优先遍历以及广度优先遍历
- 图: 广度深度优先遍历(邻接表)
- 用邻接表实现图的深度优先遍历、广度优先遍历、最短路径(无权图)
- 图的邻接表存储与深度优先遍历算法
- 图的邻接表 邻接矩阵 深度优先遍历DFS
- 无向图邻接表的深度优先遍历(DFS)
- 图的深度优先遍历(邻接表存储)
- 图的邻接表存储及深度优先遍历程序
- opencv中的图像亮度变换(图像增强)
- USACO ride
- UVa 673 括号平衡
- 1Z0-051 QUESTION 25 表名应该注意的地方和CLOB应该注意的地方
- 进制转换、冒泡排序、选择排序
- 图的深度优先遍历--邻接表实现
- C运行时库函数和API函数的区别和联系
- 对jeecg分析--利与弊
- android 从源码分析为什么Listview初次显示时没滚动却自动调用onScroll方法的原因
- 能在搜索引擎上找到CSDN刚发表的新博客吗
- 例子:两个表根据productID合并
- 如果爱,爱并不如烟
- Android中activity背景色的设置
- window.attachEvent和window.addEventListener的区别