알고리즘/DFS & BFS

백준[24480] 알고리즘 수업 - 깊이 우선 탐색 2

HJ39 2023. 1. 10. 00:23

24479번 문제의 오름차순에서 내림차순으로 변경된 것 밖에 없다.

 

#include <bits/stdc++.h>

int *dfsRes;
int dfsN2,dfsM2,dfsR2;
vector<int> dfsList2[100001];
int cnt2 = 0;
bool dfsVisited2[100001]{false};

void dfs24480(int v){
    
    if(dfsVisited2[v])
        return;
    
    dfsVisited2[v] = true;
    cnt2++;
    dfsRes[v] = cnt2;
    
    for(int i=0;i<(int)dfsList2[v].size();i++){
        int next = dfsList2[v][i];
        dfs24480(next);
    }
}

bool compare(int a, int b){
    return a>b;
}

void DFS2(){
    scanf("%d%d%d",&dfsN2,&dfsM2,&dfsR2);
    
    dfsRes = new int[dfsN2+1];
    
    for(int i=0;i<dfsM2;i++){
        int in3,in4;
        scanf("%d%d",&in3,&in4);
        dfsList2[in3].push_back(in4);
        dfsList2[in4].push_back(in3);
    }
    
    for(int i=1;i<=dfsN2;i++){
        sort(dfsList2[i].begin(),dfsList2[i].end(),compare);
    }
    
    dfs24480(dfsR2);
    
    for(int i=1;i<=dfsN2;i++){
        printf("%1d\n",dfsRes[i]);
    }
    
}