'알고리즘'에 해당되는 글 1건

반응형

#include<stdio.h>


bool connection[50][50]={0,};

bool visit[50];

int np,nw;


void dfs(int);


int main() {

    int d1,d2;

    

    printf("How many Points?");

    scanf("%d",&np);

    printf("How many ways?");

    scanf("%d",&nw);

    

    printf("\n");

    for(int i=0;i<nw;i++){

        scanf("%d %d",&d1, &d2);

        connection[d1][d2] = connection[d2][d1] = true;

    }

    

    dfs(1);

}


void dfs(int start)

{

    visit[start] = true;

    printf("Visited %d\n",start);

    for(int i=0;i<np+1;i++)

    {

        if(connection[start][i])    

            if(!visit[i])

                dfs(i);

    }

    return;

}


방향이 없는 그래프에서 가장 간단하게 구현한 DFS입니다. C언어에는 Boolean이 없기에 cpp에다 짰지만 #Define을 사용하거나 해서 쉽게 모방할 수 있습니다.

visit이라는 배열에 방문할 때마다 True로 바꿔줍니다. 그리하여 한 정점에서 연결된 다른 정점으로 이동하기 전에 그 정점이 이미 방문되었는지를 visit배열을 사용해서 체크합니다.

 if(connection[start][i])

는 start (현재 점) 과 i (이동하려는 점)이 연결되어 있는지를 봅니다.


 if(!visit[i])


는 i (이동하려는 점)이 이미 방문되었는지를 확인합니다.


dfs(i)


따라서 실질적인 이동을 하는 위의 코드는 연결되어 있는 점이 방문된 적이 없을 때만 실행되게 됩니다.


DFS는 일단 한 점에서 시작해서 들어갈 수 있는 곳까지 계속 들어가면서 탐색하는 것입니다. 따라서 위의 방법대로 하면 한 점에서 이동가능한 점으로 이동하고 또 그 점에서 이동가능한 점으로 이동하면서 계속 들어가게 됩니다.


반응형
블로그 이미지

개발자_무형

,