오 어려움
예전에 풀려고 했다가 못 풀었던 거 같음
브루트포스가 아닐까 하는 생각
...
for(int i=1; i<N+1; i++)
{
for(int j=1; j<N+1; j++)
{
if(j != i)
{
if(min_dist[i][j] == 0)
{
// j가 i의 친구라면
if(find(con[i].begin(), con[i].end(), j) != con[i].end())
{
}
}
}
}
}
-> 이 난리 치다보니까 아닌 거 같음
브루트포스 틀림
어려워
bfs 탐색하면서 도달 시 depth를 더해주면 되지 않을까
근데 depth 를 어떻게 구하지
(depth가 아니라 level이라고 해야지)
memset의 헤더를 include하지 않아 컴파일 에러 한번 떠주고
하 토나올 거 같음
- 정답 제출 코드
#include <iostream>
#include <vector>
#include <algorithm>
#include <string.h>
using namespace std;
int N, M;
int arr[101][101] = {0,};
int visited[101] = {0, };
vector <int> next_bfs;
vector <int> res_v;
int res = 0;
void bfs(int r){
if(!visited[r])
visited[r] = 1;
int level = 1;
while(!next_bfs.empty())
{
int size = next_bfs.size();
for(int j=1; j<=size; j++)
{
r = *next_bfs.begin();
next_bfs.erase(next_bfs.begin());
for(int i=1; i<N+1; i++)
{
if(arr[r][i] && !visited[i])
{
res += level;
visited[i] = 1;
next_bfs.push_back(i);
}
}
}
level++;
}
}
int main(){
cin >> N >> M;
int min_dist[101][101] = {0, };
vector<vector<int> > con;
vector <int> v;
con.push_back(v);
// 친구 배열 채워주기
for(int i=0; i<M; i++)
{
int r, c;
cin >> r >> c;
arr[r][c] = 1;
arr[c][r] = 1;
}
for(int i=1; i<N+1; i++)
{
res = 0;
memset(visited, 0, sizeof(visited));
next_bfs.push_back(i);
bfs(i);
res_v.push_back(res);
}
cout << min_element(res_v.begin(), res_v.end()) - res_v.begin() + 1 << endl;
return 0;
}
'코테준비' 카테고리의 다른 글
[알고리즘] 위상정렬 (0) | 2024.09.18 |
---|---|
[softeer/c++] 좌석 관리/string 비교 (0) | 2024.09.12 |
[그래프] 백준 1260 c++ / Nested Functions, 정적배열과 동적배열, memset .. (0) | 2024.03.14 |
[브루트포스] 백준 1107 C++ / 또 무수한 틀림과 (0) | 2024.03.13 |
[분할정복] 백준 1074 c++ (0) | 2024.03.12 |