#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Using namespace std;
#define MAX
#define LENGTH (a) (sizeof (a)/sizeof (a[0) )
int visited[MAX];
typedef struct _graph{
Char vexs[MAX];
int vexnum;
int edgnum;
int matrix[max[Max];
}graph,*pggraph;
static int get_position (Graph g, char ch) {
for(int i = 0; i<g.vexnum; i++) {
if(ch = = g.Vexs [i])
return i;
}
return -1;
}
Static char Read_char () {
char ch;
while(!) ( ((CH) >=' a ') && ((CH) <=' z ')) | | ((CH) >=' A ') && ((CH) <=' Z ' ))))
ch = GetChar();
return ch;
}
Graph creat_graph () {
Char c1,c2;
int v,e;
int p1,p2;
Graph PG;
cout<<"input number of vex >";
cin>>v;
cout<<"input number of edge >";
cin>>e;
//memset (pg,0,sizeof (Graph));
Pg. Vexnum = v;
Pg. edgnum = e;
//initialize Vexs
for(int i=0; i<pg. Vexnum; i++) {
//pg.vexs[i] = Read_char ();
cin>>PG. Vexs[i];
}
//initialize Edges
for(int i = 0; i < PG. Edgnum; i++) {
//c1 = Read_char ();
//c2 = Read_char ();
cin>>c1>>c2;
cout<<c1<<c2<<endl;
P1 = get_position(PG, C1);
P2 = get_position(PG, C2);
Pg. matrix[P1][P2] = 1;
Pg. matrix[P2][P1] = 1;
}
return PG;
}
static int next_vertex (Graph g, int v,int w) {
if(v<0 | | v>g.vexnum-1| | w<0 | | w> (G.vexnum-1 )) return -1;
for(int i=w+1; i < G.vexnum; i++) {
if(g.matrix[v][i] = = 1) return i;
}
return -1;
}
static int first_vertex (Graph g, int v) {
if(v<0 | | v>g.vexnum-1) return -1;
for(int i=0; i < G.vexnum; i++) {
if(g.matrix[v][i] = = 1) return i;
}
return -1;
}
void DFS (Graph g, int i) {
if(visited[i] = = 0) {
visited[i] = 1;
cout<<gvexs[i]<<"";
}
int w = First_vertex(g,i);
for(; w>=0; w = Next_vertex(g,i,w)) {
if(! Visited[W]) DFS(g,w);
}
}
int Main (int argc, const Char * argv[]) {
for(int i = 0; i < MAX; i++) {
visited[i] = 0;
}
Graph g;
g= creat_graph();
for(int i = 0; i< G.Vexnum; i++) {
if(! Visited[i]) DFS(g,i);
}
return 0;
}
Implementation of a depth-first traversal of a graph C + + DFS