์ž๋ฃŒ ๊ตฌ์กฐ

BFS ๊ตฌํ˜„

youngdeok 2023. 2. 28. 19:46

BFS ๊ฐœ๋…: https://yongdeok.tistory.com/entry/%EA%B7%B8%EB%9E%98%ED%94%84

DFS๋ฅผ ์™„์ „ํžˆ ์ดํ•ดํ•˜๋ฉด ๋” ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

compile with

CircularQueue → https://yongdeok.tistory.com/7

LinkedList → https://yongdeok.tistory.com/3

Bfs.c

void BFShowGraphVertex(ALGraph *pg, int startV)
{
    Queue queue;
    int visitV = startV;
    int nextV;

    QueueInit(&queue);

    VisitVertex(pg, visitV);

    while (LFirst(&(pg->adjList[visitV]), &nextV) == TRUE)
    {
        if (VisitVertex(pg, nextV) == TRUE)
            Enqueue(&queue, nextV);
        while (LNext(&(pg->adjList[visitV]), &nextV) == TRUE)
        {
            if (VisitVertex(pg, nextV) == TRUE)
                Enqueue(&queue, nextV);
        }
        
        if (QIsEmpty(&queue) == TRUE)
            break;
        else
            visitV = Dequeue(&queue);
    }
    memset(pg->visitInfo, 0, sizeof(int) * pg->numV);
}

DFS์™€์˜ ์œ ์ผํ•˜๊ฒŒ ๋‹ค๋ฅธ ์ฝ”๋“œ์ด๋‹ค. ์ด ์—ญ์‹œ ์ฝ”๋“œ๋ฅผ ๊ทธ๋ ค๊ฐ€๋ฉด์„œ ์ •๋ฆฌํ•˜๋‹ค๋ณด๋ฉด ๊ธˆ๋ฐฉ ์ดํ•ด๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. ๋ฌผ๋ก  Stack๋Œ€์‹  Queue๋ฅผ includeํ•ด์•ผ ํ•œ๋‹ค!.

Bfs.cpp

void ALGraph::BFShowGraphVertex(int startV)
{
    Queue queue;
    int visitV = startV;
    int nextV;

    queue.QueueInit();

    VisitVertex(visitV);

    while (adjList[visitV].LFirst(&nextV) == true)
    {
        if (VisitVertex(nextV) == true)
            queue.EnQueue(nextV);
        while (adjList[visitV].LNext(&nextV) == true)
        {
            if (VisitVertex(nextV) == true)
                queue.EnQueue(nextV);
        }
        
        if (queue.QIsEmpty() == true)
            break;
        else
            visitV = queue.DeQueue();
    }
    memset(visitInfo, 0, sizeof(int) * numV);
}