[11724] 연결 요소의 개수, C/C++

2019. 7. 24. 17:58·DEV/PS

한줄 후기 : 쩝

 

https://www.acmicpc.net/problem/11724

 

11724번: 연결 요소의 개수

첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다.

www.acmicpc.net

 

#include <stdio.h>
#define MAX 1002
int graph[MAX][MAX] = {0,};
int visit[MAX]={0};
int vertex, edge;
int DFS(int v);
int main(){
	int cnt=0;
	int i, a,b;
	scanf("%d %d\n", &vertex, &edge);
	for(i=0; i<edge; i++){
		scanf("%d %d", &a, &b);
		graph[a][b]= 1;
		graph[b][a]= 1;
	}
	for(i=1; i<=vertex; i++){
		if(!visit[i]){
			DFS(i);
			cnt++;
		}
	}
	printf("%d", cnt);
	return 0;
}
int DFS(int v){
	int i;
	visit[v] = 1;
	for(i=1; i<=vertex; i++){
		if(graph[v][i]){
			if(!visit[i]) 	DFS(i);
		}
	}
	return;
}

c로 푼 코드, 인접행렬 만들고 DFS 사용

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool visit[1002]={false}; 
vector<int> met[1002];
int dfs(int start);
int main(){
	int n, m;
	cin >> n >> m;
	for(int i = 0; i<m; i++){
		int u, v;
		cin >> u >> v;
		met[u].push_back(v);
		met[v]. push_back(u);
	}
	int cnt = 0;
	for(int i=1; i<=n; i++){
		if(visit[i] == false){
			dfs(i);
			cnt++;
		}
	}
	cout << cnt;
}
int dfs(int start){
	visit[start] = true;
	for(int i=0; i < met[start].size(); i++ ){
		int next = met[start][i];
		if(visit[next]==false)	dfs(next);
	}
}

 

c++로 푼 DFS 이용 코드 벡터를 이용해 연결된 정점을 넣어준다.

 

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
bool visit[1002]={false}; 
vector<int> met[1002];
int bfs(int start);
int main(){
	int n, m;
	cin >> n >> m;
	for(int i = 0; i<m; i++){
		int u, v;
		cin >> u >> v;
		met[u].push_back(v);
		met[v]. push_back(u);
	}
	int cnt = 0;
	for(int i=1; i<=n; i++){
		if(visit[i] == false){
			bfs(i);
			cnt++;
		}
	}
	cout << cnt;
}
int bfs(int start){
	queue<int> q;
	visit[start] = true;
	q.push(start);
	while(!q.empty()){
		int now = q.front();
		q.pop();
		for(int i=0; i<met[now].size(); i++){
			int next = met[now][i];
			if(visit[next]==false) {
				visit[next] = true;
				q.push(next);
			}
		} 
	}
}

c++로 푼 BFS 이용 코드

벡터와 큐를 사용

 

'DEV > PS' 카테고리의 다른 글

[7576] 토마토, C++  (0) 2019.07.24
[2606] 바이러스, C++  (0) 2019.07.24
[11057] 오르막 수 , C++  (0) 2019.07.23
[2193] 이친수, C++  (0) 2019.07.23
[9095] 1,2,3 더하기, C++  (0) 2019.07.23
'DEV/PS' 카테고리의 다른 글
  • [7576] 토마토, C++
  • [2606] 바이러스, C++
  • [11057] 오르막 수 , C++
  • [2193] 이친수, C++
jobchae
jobchae
말하는 감자지만, 코드를 끄적이는 Node.js 백엔드 개발자입니다.
  • jobchae
    JOBCHAE
    jobchae
  • 전체
    오늘
    어제
    • 🚀 JOBCHAE (177)
      • DEV (146)
        • PS (108)
        • Node.js (12)
        • React (3)
        • docker (1)
        • 잡다한 개발 일지 (20)
        • injection (1)
        • CI CD (0)
        • JS, TS (1)
      • 축구 (0)
      • 일상 (19)
      • 영화 (3)
      • 음악 (8)
  • 블로그 메뉴

    • 💻 Github
    • 🙋🏻 Linkedin
    • 📖 방명록
  • 링크

    • PS Github
  • 공지사항

  • 인기 글

  • 태그

    리액트
    위상정렬
    BFS
    DFS
    슬랙봇
    boj
    솝트
    slack
    PS
    렛츠락페스티벌
    이분탐색
    SOPT
    우선순위큐
    nodejs
    회고
    앱잼
    백준
    Express
    일상
    typescript
    react
    Nest.js
    node.js
    aws
    알고리즘
    Nest
    슬랙
    GitHub
    mongoDB
    DP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
jobchae
[11724] 연결 요소의 개수, C/C++
상단으로

티스토리툴바