#pragma once
#ifndef ___SrchALGraph
#define ___SrchALGraph
//SrchALGraph.h ; 탐색 기능이 추가된 인접 리스트 기반 그래프 클래스
#include "AdjListGraph.h"
#include "CircularQueue.h"
class SrchALGraph : public AdjListGraph {
bool visited[MAX_VTXS]; //정점의 방문 정보
public:
void resetVisited() { //모든 정점을 방문하지 않았다고 설정
for (int i = 0; i < size; i++)
visited[i] = false;
}
bool isLinked(int u, int v) {
for (Node* p = adj[u]; p != NULL; p = p->getLink())
if (p->getId() == v) return true;
return false;
}
//깊이 우선 함수
void DFS(int v) {
visited[v] = true; //현재 정점을 방문함
printf("%c ", getVertex(v)); //정점의 이름 출력
for (Node* p = adj[v]; p != NULL; p = p->getLink())
if (visited[p->getId()] == false)
DFS(p->getId()); //정점 w에서 DFS 새로 시작
}
//인접 리스트로 표현된 그래프에 대한 너비우선탐색 연산
void BFS(int v) {
visited[v] = true; //현재 정점을 방문함
printf("%c ", getVertex(v)); //정점의 이름 출력
CircularQueue que;
que.enqueue(v); //시작 정점을 큐에 저장
while (!que.dequeue()) {
int v = que.dequeue(); //큐에 정점 추출
for (Node* w = adj[v]; w != NULL; w = w->getLink()) {
int id = w->getId(); //인접 노드의 정점 ID
if (!visited[id]) { //미방문 정점 탐색
visited[id] = true; //방문 표시
printf("%c ", getVertex(id));
que.enqueue(id); //방문한 정점을 큐에 저장
}
}
}
}
};
#endif // !___SrchALGraph
'Programming > DS SorceCode' 카테고리의 다른 글
WGraph.h : 가중치 그래프 클래스 (0) | 2019.04.01 |
---|---|
TopoSortGraph.h : 위상 정렬 기능이 추가된 인접 리스트 기반 그래프 (0) | 2019.04.01 |
SrchAMGraph : 탐색 기능이 추가된 행렬 기반 그래프 클래스 (0) | 2019.04.01 |
AdjListGraph.h : 인접 리스트를 이용한 그래프 클래스 (0) | 2019.04.01 |
Node.h : 인접 리스트를 이용한 그래프를 위한 노드 클래스 (0) | 2019.04.01 |