zoukankan      html  css  js  c++  java
  • 深度-first遍历图--邻接表实现

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

    #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:
    ");
            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:
    ");
            int i;
            for(i=0;i<nodeNum;i++){
                    DFTcore(adjilist,i,vertexStatusArr);
            }
            printf("
    ");
    }
    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)。

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

  • 相关阅读:
    Javascript设计模式学习三(策略模式)
    Javascript设计模式学习二(单例)
    HTML5 Canvas 绘图
    Javascript设计模式学习一
    Node.js学习笔记(一)
    C# 多线程
    Solr搜索引擎的搭建与应用
    solr的配置文件及其含义
    SolrNet的基本用法及CURD
    Tomcat安装及配置教程
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4745300.html
Copyright © 2011-2022 走看看