深度优先遍历算法

#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>

 

posted @ 2013-08-08 06:38  SKY_VIEW  阅读(482)  评论(0编辑  收藏  举报