무방향도의 연결 집합

19945 단어

무방향도의 연결 집합


제목 출처:https://pintia.cn/problem-sets/15/problems/714저장 성
  • 이 그림은 무방향도이기 때문에 연결 집합을 찾을 때 시작점을 통해 깊이 우선 검색을 하거나 넓이 우선 검색을 통해 도달할 수 있는 점을 찾으면 연결 집중에 가입할 수 있다..

  • bfs 및 dfs


    dfs
    		dfs , , 
    	 。
    
    void dfs(int i, int n){
    	printf(" %d",i);
    	vistag[i] = 1;
    	// 
    	for (int j = 0; j < n; j++){
    		if (vistag[j] == 0 && map[i][j]){
    			dfs(j, n);
    		}
    	}
    }
    

    bfs
    		bfs , , 
    	 。
    
    void bfs(int i, int n){
    	
    	vistag[i] = 1;
    	// push 
    	que.push(i);
    	while (que.empty() == false){
    		// , map[vis][j] visit
    		int vis = que.front();
    		printf(" %d",vis);
    		que.pop();
    		for (int j = 0; j < n; j++){
    			if (vistag[j] == 0 && map[vis][j]){
    				vistag[j] = 1;
    				que.push(j);
    			}
    		}
    	}
    	
    }
    

    모든 코드

    #include
    #include
    #include
    
    using namespace std;
    queue<int>que;
    int vistag[100] = { 0 };
    int map[100][100] = { 0 };
    
    void dfs(int i, int n){
    	printf(" %d",i);
    	vistag[i] = 1;
    	for (int j = 0; j < n; j++){
    		if (vistag[j] == 0 && map[i][j]){
    			dfs(j, n);
    		}
    	}
    }
    
    void bfs(int i, int n){
    	
    	vistag[i] = 1;
    	que.push(i);
    	while (que.empty() == false){
    		int vis = que.front();
    		printf(" %d",vis);
    		que.pop();
    		for (int j = 0; j < n; j++){
    			if (vistag[j] == 0 && map[vis][j]){
    				vistag[j] = 1;
    				que.push(j);
    			}
    		}
    	}
    	
    }
    int main(){
    	int N, E;
    	int v, u;
    	while (scanf("%d%d", &N, &E) != EOF){
    		memset(vistag, 0, sizeof(vistag));
    		memset(map, 0, sizeof(map));
    
    		for (int i = 0; i < E; i++){
    			scanf("%d%d", &v, &u);
    			map[v][u] = 1;
    			map[u][v] = 1;
    		}
    		for (int i = 0; i < N; i++){
    			if (vistag[i] == 0){
    				printf("{");
    				dfs(i, N);
    				printf(" }
    "
    ); } } memset(vistag, 0, sizeof(vistag)); for (int i = 0; i < N; i++){ if (vistag[i] == 0){ printf("{"); bfs(i, N); printf(" }
    "
    ); } } } return 0; }

    좋은 웹페이지 즐겨찾기