#include <iostream>
using namespace std;
struct EdgeNode
{
int adjvex;
EdgeNode* next;
};
struct VertexNode
{
char vertex;
EdgeNode* FirstEdge;
};
const int MaxSize = 10;
int visited[MaxSize] ;
class ALGraph
{
public:
ALGraph(char a[], int n, int e);
void GDPrint(int v);
void SDPrint(int v);
private:
VertexNode adjlist[MaxSize];
int vertexNum, EdgeNum;
};
ALGraph::ALGraph(char a[], int n, int e)
{
EdgeNode* s;
vertexNum = n; EdgeNum = e;
for (int i = 0; i < vertexNum; i++)
{
adjlist[i].vertex = a[i];
adjlist[i].FirstEdge = NULL;
}
int i, j;
for (int k = 0; k < EdgeNum; k++)
{
cin >> i >> j;
s = new EdgeNode;
s->adjvex = j;
s->next = adjlist[i].FirstEdge;
adjlist[i].FirstEdge = s;
}
}
void ALGraph::SDPrint(int v)
{
EdgeNode* p = NULL;
cout << adjlist[v].vertex;
visited[v] = 1;
p = adjlist[v].FirstEdge;
while (p != NULL)
{
int j = p->adjvex;
if (visited[j] == 0)
{
SDPrint(j);
}p = p->next;
}
}
void ALGraph::GDPrint(int v)
{
int Q[MaxSize];
EdgeNode* p = NULL;
int front = -1;
int rear = -1;
cout << adjlist[v].vertex;
visited[v] = 1;
Q[++rear] = v;
while (rear != front)
{
int w = Q[++front];
p = adjlist[w].FirstEdge;
while (p != NULL)
{
int j = p->adjvex;
if (visited[j] == 0)
{
cout << adjlist[j].vertex;
visited[j] = 1;
Q[++rear] = j;
}p = p->next;
}
}
}
int main()
{
char ch[] = { 'a','b','c','d' };
ALGraph s(ch, 4,4 );
for (int i = 0; i < MaxSize; i++)
{
visited[i] = 0;
}
s.SDPrint(0);
}