#include <vector>
#include <iostream>
#include <queue>
using namespace std;
const int maxn = 10000;
#define N 6
bool visited[maxn];
struct Node {
int vertex;//弧头或者边所连的点
Node* pNext;//下一条依附于该点的弧或边
};
struct Head {
char data;
Node* first;//依附于该顶点的第一条边
};
typedef Head* Graph;
Graph createGraph()
{
Graph graph = new Head[N];
int i = 0;
for (int i = 0; i < N; i++)
graph[i].data = 'A' + i;
Node* p00 = new Node;
Node* p01 = new Node;
Node* p10 = new Node;
Node *p11 = new Node;
Node* p12 = new Node;
Node* p20 = new Node;
Node* p21 = new Node;
Node* p30 = new Node;
Node* p31 = new Node;
Node* p40 = new Node;
Node* p41 = new Node;
Node* p42 = new Node;
Node* p50 = new Node;
Node* p51 = new Node;
p00->vertex = 1;
p00->pNext = p01;
p01->vertex = 2;
p01->pNext = NULL;
p10->vertex = 0;
p10->pNext = p11;
p11->vertex = 3;
p11->pNext = p12;
p12->vertex = 4;
p12->pNext = NULL;
p20->vertex = 0;
p20->pNext = p21;
p21->vertex = 5;
p21->pNext = NULL;
p30->vertex = 1;
p30->pNext = p31;
p31->vertex = 4;
p31->pNext = NULL;
p40->vertex = 1;
p40->pNext = p41;
p41->vertex = 3;
p41->pNext = p42;
p42->vertex = 5;
p42->pNext = NULL;
p50->vertex = 2;
p50->pNext = p51;
p51->vertex = 4;
p51->pNext = NULL;
graph[0].first = p00;
graph[1].first = p10;
graph[2].first = p20;
graph[3].first = p30;
graph[4].first = p40;
graph[5].first = p50;
return graph;
}
int firstVertex(Graph Gp, int pos) {
if (Gp[pos].first)
return Gp[pos].first->vertex;
else
return -1;
}
int nextVertex(Graph Gp, int pos,int cur) {
Node* p = Gp[pos].first;
while (p->vertex != cur)
p = p->pNext;
if (p->pNext)
return p->pNext->vertex;
else
return -1;
}
void DFS(Graph Gp, int begin) {
cout << Gp[begin].data;
visited[begin] = 1;
int i;
i = firstVertex(Gp, begin);
if (i >= 0)
{
if (!visited[i])
DFS(Gp, i);
//visited[i] = 0;
}
while (nextVertex(Gp, begin, i) != -1)
{
i = nextVertex(Gp, begin, i);
if (i >= 0)
{
if (!visited[i])
DFS(Gp, i);
//visited[i] = 0;
}
}
return;
}
void DFS_traverse(Graph Gp, int begin)
{
int i;
for (i = 0; i < N; i++)
visited[i] = 0;
DFS(Gp, begin);
for (i = 0; i < N; i++)
{
if (!visited[i])
DFS(Gp, i);
}
}
queue<int> Q;
void BFS(Graph Gp, int begin)
{
cout << Gp[begin].data;
visited[begin] = 1;
int i, pVertex;
Q.push(begin);
while (!Q.empty())
{
pVertex = Q.front();
Q.pop();
for (i = firstVertex(Gp, pVertex); i >= 0; i = nextVertex(Gp, pVertex, i))
{
if (!visited[i])
{
cout << Gp[i].data;
visited[i] = 1;
Q.push(i);
}
}
}
}
int main()
{
Graph Gp = createGraph();
DFS(Gp, 0);
cout << endl;
memset(visited, 0, maxn);
BFS(Gp, 0);
}