//邻接表存储
typedef struct ArcNode{ //边表
int position; //顶点位置
struct ArcNode *next; //指向下一边表节点
}ArcNode;
typedef struct VNode{ //顶点表
dataType data; //数据
ArcNode *first; //指向第一个边表节点
}VNode,List[100];
typedef struct Graph{ //邻接表
List vertices; //邻接表顶点和边的集合
int vnum,arcnum; //顶点数+边数
}Graph;
/**
* 递归实现深度优先和广度优先
*/
//深度优先
void DFS(Graph &G, int v){
visit(v);
visited[v] = 1;
if(w = firstNeighbor(G,v); w >= 0; w = NextNeighbor(G,v,w))
{
if(!visited[w]){
visit(w);
DFS(G , w);
}
}
}
//广度优先,借助队列
void BFS(Graph &G, int v){
visit(v);
visited[v] = 1;
Queue q;
Enqueue(q,v);
if(w = firstNeighbor(G,v); w >= 0; w = NextNeighbor(G,v,w))
{
Dequeue(q);
if(!visited[w] || q){
Enqueue(q,e);
BFS(G , w);
}
}