zoukankan      html  css  js  c++  java
  • 深度优先遍历算法

    #include "stdafx.h"
    #include<iostream>
    using namespace std;
    struct arc
    {
    int vertex;
    arc *nextarc;
    };
    struct vnode
    {
    int vertex,visited;
    arc *firstarc;
    };
    
    struct G
    {
    vnode adjlist[6];
    int n,e;
    };
    
    void simplepath()
    {
    
    }
    
    G *creategraph()
    {
    vnode adjlist[6];
    int a[][4]={{2,3,6},{5,4,1},{1,6},{2,5,6},{2,4,6},{4,5,3,1}};
    for(int i=0;i<6;i++)
    {
    adjlist[i].vertex=i+1;
    adjlist[i].firstarc=(arc*)malloc(sizeof(arc));
    adjlist[i].visited=0;
    arc *tmp=adjlist[i].firstarc,*lastnode;
    for (int j=0;j<4;j++)
    {
        if(a[i][j])
        {
        
        lastnode=tmp;
        tmp->vertex=a[i][j];
        tmp->nextarc=(arc*)malloc(sizeof(arc));
        tmp=tmp->nextarc;
        }
        
    }
    free((arc*)tmp);
    lastnode->nextarc=NULL;
    }
    G *g=(G*)malloc(sizeof(G));
    memcpy(g->adjlist,adjlist,sizeof(vnode)*6);
    g->n=6;
    return g;
    }
    
    void DFS(G *g,int index)
    {    
        vnode *vn=&g->adjlist[index-1];
        arc *tmp=vn->firstarc;
        if(vn->visited==0)
        {
          cout<<vn->vertex<<endl;
          vn->visited=1;
        while(tmp!=NULL)
        {     
          DFS(g,tmp->vertex);  
          tmp=tmp->nextarc;
        }
        }
    }
    void main()
    {
        G *g=creategraph();
        for(int i=0;i<6;i++)
        cout<<g->adjlist[i].firstarc->nextarc->vertex<<endl;
        DFS(g,1);
        system("pause");
    }

     javascript实现(仿C语言实现):

    <script>
    function arc()
    {
    this.vertex=0;
    this.nextarc=0;
    }
    function vnode()
    {
    this.visited=0;
    this.vertex=0;
    this.firstarc=0;
    }
    function G()
    {
    this.adjlist=new Array();
    }
    function creategraph()
    {
    var a=[[2,3,6],[1,5,4],[4,6,1],[2,3,5],[4,2,6],[3,5,1]];
    var g=new G();
    for (i=0;i<6;i++)
    {
    g.adjlist[i]=new vnode();
    g.adjlist[i].vertex=i+1;
    g.adjlist[i].firstarc=new arc();
    tmp=g.adjlist[i].firstarc;
    for(j=0;j<3;j++)
    {
    tmp.vertex=a[i][j];
    if(j==2)tmp=0;
    else{
    tmp.nextarc=new arc();
    tmp=tmp.nextarc;}
    
    }
    }
    return g;
    }
    function DFS(g,index)
    {
    if(g.adjlist[index-1].visited==0)
    {
    g.adjlist[index-1].visited=1;
    alert(g.adjlist[index-1].vertex);
    var tmp=g.adjlist[index-1].firstarc;
    while(tmp!=0)
    {
    DFS(g,tmp.vertex);
    tmp=tmp.nextarc;
    }
    }
    }
    DFS(creategraph(),4);
    </script>

     javascript实现(利用javascript的语言特点):

    <script>
    function vnode()
    {
    this.visited=0;
    this.vertex=0;
    this.arcs=new Array();
    }
    function G()
    {
    this.adjlist=new Array();
    }
    function creategraph()
    {
    var a=[[2,3,6],[1,5,4],[4,6,1],[2,3,5],[4,2,6],[3,5,1]];
    var g=new G();
    for (i=0;i<6;i++)
    {
    g.adjlist[i]=new vnode();
    g.adjlist[i].vertex=i+1;
    g.adjlist[i].arcs=a[i];
    }
    return g;
    }
    function DFS(g,index)
    {
    if(g.adjlist[index-1].visited==0)
    {
    g.adjlist[index-1].visited=1;
    alert(g.adjlist[index-1].vertex);
    tmp=g.adjlist[index-1].arcs;
    for(i=0;i<tmp.length;i++)
    {
    DFS(g,tmp[i]);
    }
    }
    }
    //DFS(creategraph(),4);
    </script>
    相信世界是平的
    谨记四个字“修身养性”
    大江东去浪淘尽英雄,再牛B的人物最后也是一掊土
    向善不是目的,而是抚慰心灵,更多的感受幸福,感谢别人给你行善的机会
    相信老子的话:万物生于有,有生于无,一切的道理都源于一个无法证明的假设
    我是好是坏就自然而然的摆在那里,并不会因为别人的评价而改变什么,我也不需要别人用一张纸来说明我什么,世间最难得的是自由



    支持大额赞助:
  • 相关阅读:
    7-41 PAT排名汇总 (25分)--排序
    7-40 奥运排行榜 (25分)--sort()排序,结构体,前驱
    7-39 魔法优惠券 (25分)--sort()
    7-38 寻找大富翁 (25分)--sort()
    7-37 模拟EXCEL排序 (25分)--优先队列
    python网络编程--socketserver 和 ftp功能简单说明
    python网络编程--FTP上传文件示例
    python网络编程--粘包解决方案 和 subprocess模块
    python网络编程--socket,网络协议,TCP
    python -- 模块和包
  • 原文地址:https://www.cnblogs.com/sky-view/p/3244949.html
Copyright © 2011-2022 走看看