这里用邻接表实现图的深度优先遍历,采用递归实现。
#includeusing 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 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 to<<')'< next; } } } //深度优先遍历 void DFT(vnode *adjilist, int* vertexStatusArr,int nodeNum) { printf("start BFT graph:\n"); int i; for(i=0;i next) { DFTcore(adjilist, p->to, vertexStatusArr); } }
时间复杂度为O(V+E)。