티스토리 뷰
사용언어 : C++
- 워셜 알고리즘은 관계의 전이 폐쇄를 구하는 효율적인 방법이다. 여기서 관계란 n * n 행렬을 말하고, 이 행렬의 전이 폐쇄를 구하는 알고리즘 중 하나가 워셜 알고리즘이다.
- 여기서 폐쇄란, R이 행렬 A에 대한 관계이고, 만약 어떤 특성 P(대칭, 전이, 반사)를 가지지 않는다면 R을 포함하면서 특성 P를 만족시키는 A에 대한 가장 작은 관계 S를 말한다. 고로 전이 폐쇄는, 전이 특성을 포함하는 가장 작은 관계 S를 말한다.
워셜 알고리즘의 의사코드
W := M
for k := 1 to n
for i := 1 to n
for j := 1to n
W(i,j) := W(i,j) or ( W(i,k) and W(k,j) )
return W{ W = [w(i,j) is M(R*)] }
워셜 알고리즘 C++ 코드
void Warshall() {
int arr[4][4] = { {0,0,0,1},{1,0,1,0},{1,0,0,1},{0,0,1,0} };
//int arr[4][4] = { {0,1,0,0},{1,0,1,0},{0,0,0,1},{1,0,0,0} };
for (int k = 0; k < 4; k++) {
for (int i = 0; i < 4; i++) {
if (k == i) // 똑같은 부분 건너뛰기.
continue;
else if (arr[i][k] == 1) { // 만약 arr[i][k] 행렬이 1이라면 arr[k]로 가는 관계가 잇음. 따라서 arr[k]를 판별
for (int j = 0; j < 4; j++) { // arr[k][j] 행렬이 1이라면 arr[i][j]로 가는 전이 관계가 존재하여 추가.
if (arr[k][j]) {
arr[i][j] = 1;
}
}
}
}
cout << "W[" << k << "] : " << endl;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
}
}
왼쪽과 같이 작동하는 코드를 볼 수 있다.
'자료구조 및 알고리즘 > 자료구조' 카테고리의 다른 글
문자열 파싱) Position, Remove 방식 (0) | 2022.06.17 |
---|---|
C++ STL) 심심해서 만들어본 간단한 Vector (0) | 2022.06.17 |
자료구조) Queue 큐 - 선형큐인줄 알았지만 슬픈 원형 큐 (0) | 2022.06.14 |
링크드리스트) 두개의 다항식 계산 (0) | 2022.06.14 |
정렬 알고리즘) 버블정렬, 선택 정렬 (0) | 2022.06.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 정보보안
- 더블버퍼링
- 링크드 리스트
- 시스템보안
- 인제대학교
- 지뢰찾기
- 학교
- 보안
- BFS
- STL
- 드림핵
- c++
- 고양이
- 자료구조
- 레지스터
- 워셜알고리즘
- 멀티쓰레드
- 야경
- Select모델
- Dreamhack
- 컨퍼런스
- 백준
- queue
- 알고리즘
- 스레드풀
- 개발
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
글 보관함