(백준/c++) 11403 - 경로찾기 / BFS, 그래프📃 coding test/◽ 백준2024. 8. 16. 17:59
Table of Contents
728x90
"(백준/c++) 11403 - 경로찾기 / BFS, 그래프"
https://www.acmicpc.net/problem/11403
🏆 solved.ac 난이도: 실버1
오늘 쉬는 날이라 문제 푸는게 재미있다.
Array 변수 이름은 Floyed이지만? 플로이드 와샬보다 BFS를 사용해서 푸는게 더 편할거 같아서 BFS로 풀었다.
다른 BFS와 다른 점은 모든 점에서 방문을 초기화 시켜줘야한다.
ex ) 1 -> 5 -> 6 -> 7 이런 연결이 있을 때, 1을 5, 6, 7을 모두 방문 할 수 있다는 표시를 해줘야하고 그 다음 5번, 6번, 7번점도 이전에 방문 했더라도 연결되었는지 확인하기 위해 점 시작점에서 방문을 초기화 해야한다.
#include<iostream>
#include<vector>
#include<queue>
#include<memory.h>
using namespace std;
vector<int> arr[101];
int Floyed[101][101] = {0, };
bool visit[101] = { false, };
queue<int> que;
int main(void)
{
int N; cin >> N;
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= N; j++)
{
int a;
cin >> a;
if (a)
{
arr[i].push_back(j);
}
}
}
//=============================================//
for (int i = 1; i <= N; ++i)
{
memset(visit, false, sizeof(visit));
if (visit[i])
{
continue;
}
que.push(i);
visit[i] = true;
while (!que.empty())
{
int temp = que.front();
visit[temp] = true;
que.pop();
for (int j = 0; j < arr[temp].size(); ++j)
{
if (visit[arr[temp][j]] == false)
{
visit[arr[temp][j]] = true;
Floyed[i][arr[temp][j]] = 1;
que.push(arr[temp][j]);
}
else if(visit[arr[temp][j]] == true && arr[temp][j] == i)
{
Floyed[i][i] = 1;
}
}
}
}
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= N; j++)
{
cout << Floyed[i][j] << " ";
}
cout << endl;
}
return 0;
}
728x90
'📃 coding test > ◽ 백준' 카테고리의 다른 글
(백준/c++) 1238 - 파티 / 최단경로그래프, 플로이드 워샬 (0) | 2024.08.22 |
---|---|
(백준/c++) 10026 - 적록색약 / BFS, 그래프 (0) | 2024.08.20 |
(백준/c++) 11724 - 연결 요소의 개수 / BFS, 그래프 (0) | 2024.08.16 |
(백준/c++) 14940 - 쉬운 최단 거리 / DFS, 그래프 (0) | 2024.08.16 |
(백준/ C++) 12101- 1, 2, 3 더하기2 / 다이나믹 프로그래밍, 재귀 (0) | 2024.07.19 |
@핑크코냥 :: 핑크코냥
안 하는 것 보다 낫겠지
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!