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的人物最后也是一掊土
    向善不是目的,而是抚慰心灵,更多的感受幸福,感谢别人给你行善的机会
    相信老子的话:万物生于有,有生于无,一切的道理都源于一个无法证明的假设
    我是好是坏就自然而然的摆在那里,并不会因为别人的评价而改变什么,我也不需要别人用一张纸来说明我什么,世间最难得的是自由



    支持大额赞助:
  • 相关阅读:
    jmeter(46) redis
    jmeter(45) tcp/ip协议
    Codeforces Round #538 (Div. 2)D(区间DP,思维)
    Codeforces Global Round 1D(DP,思维)
    Educational Codeforces Round 57D(DP,思维)
    UPC11073(DP,思维)
    Yahoo Progamming Contest 2019D(DP,思维)
    Atcoder Beginner Contest 118D(DP,完全背包,贪心)
    Xuzhou Winter Camp 1C(模拟)
    Educational Codeforces Round 57 (Rated for Div. 2)D(动态规划)
  • 原文地址:https://www.cnblogs.com/sky-view/p/3244949.html
Copyright © 2011-2022 走看看