백준/그래프

[백준 11403번 / C++/ 플로이드-와샬] 경로 찾기

배발자 2022. 3. 10.
반응형

플로이드-와샬 문제이다. 

 

24. 플로이드 와샬(Floyd Warshall) 알고리즘

지난 시간에는 다익스트라(Dijkstra) 알고리즘에 대해 학습했습니다. 다익스트라 알고리즘은 하나의 정점...

blog.naver.com


플로이드 와샬 알고리즘을 모르시는 분은 위의 링크에 들어가서 개념을 숙지하고 오길 추천한다. 

 

#접근 방법 

 

노드 1에서 노드 3으로 연결된 길이 있는지 물어봤다면?

 

노드 1에서 노드 2를 거쳤다가 노드 3으로 가는 길이 있는지.

노드 1에서 노드 4를 거쳤다가 노드 3으로 가는 길이 있는지. 

 

이러한 방식으로 확인해보면서 그래프 값을 갱신해주는 것이다. 

 

#include <iostream>
using namespace std; 
int g[101][101]; 
int main() {
	int n; cin >> n; 
	for(int i=0; i<n; i++){
		for (int j = 0; j < n; j++) {
			cin >> g[i][j]; 
		}
	}
	for (int k = 0; k < n; k++) {
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				if (g[i][k] && g[k][j]) {
					g[i][j] = 1; 
				}
			}
		}
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cout << g[i][j] << " ";
		}cout << endl; 
	}

}

 

 

11403번: 경로 찾기

가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오.

www.acmicpc.net

 

반응형

댓글