速記圖的遍歷(DFS和BFS)

非浪得虛名發表於2020-12-22
//鄰接表儲存
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);
	}
}

相關文章