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