[๋ฐฑ์ค€] 11780 ํ”Œ๋กœ์ด๋“œ2 - ํ”Œ๋กœ์ด๋“œ ๊ฒฝ๋กœ๋ณต์›

2024. 8. 4. 02:30ยท๐Ÿ’ป Algorithms/๋ฐฑ์ค€

[ ๋ฌธ์ œ๋งํฌ ]

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

 

๐Ÿšฉ ์กฐ๊ฑด

  1. ๋ชจ๋“  ๋„์‹œ์˜ ์Œ์— ๋Œ€ํ•ด ํ•„์š”ํ•œ ๋น„์šฉ์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด๋ผ
  2. ๊ฐ ์ตœ์†Ÿ๊ฐ’์— ๋Œ€ํ•ด ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•ด๋ผ

 

 

๐Ÿšฉ ์ ‘๊ทผ

1 -> ํ”Œ๋กœ์ด๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด์šฉํ•˜์ž! (์‚ผ์ค‘for๋ฌธ ์“ฐ๋ฉด ๋จ)
2 -> ํ”Œ๋กœ์ด๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ฒฝ๋กœ๋ณต์›
       (nxt table ๋งŒ๋“ค์–ด์„œ ๊ฒฝ๋กœ ๊ฐฑ์‹  ๋  ๋•Œ๋งˆ๋‹ค nxt๋„ ๊ฐฑ์‹ )

 

 

๐Ÿšฉ ์‹œํ–‰์ฐฉ์˜ค

 ๊ฒฝ๋กœ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ณ ๋ฏผ์„ ๋งŽ์ด ํ–ˆ๋Š”๋ฐ(์žฌ๊ท€ํ•จ์ˆ˜, while๋ฌธ ๋“ฑ๋“ฑ) ์ž˜ ์•ˆ ํ’€๋ ธ๋‹ค. ๊ทผ๋ฐ ๋ฐฉ๋ฒ•์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ nxt table์„ ๋ณด๋Š” ๋ฐฉ๋ฒ•์ด ํ‹€๋ ธ๋˜ ๊ฒƒ์ด์—ˆ๋‹ค.ใ… 

 

 nxt table์ด ์œ„์™€ ๊ฐ™์œผ๋ฉด 2์—์„œ 1๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค.

nxt[2][1] = 4 (2์—์„œ 1๋กœ ์ตœ์†Œ๋น„์šฉ์œผ๋กœ ๊ฐ€๋ ค๋ฉด 4๋ฅผ ๊ฑฐ์ณ์•ผ ํ•จ, 4๋กœ ์ด๋™)
-> nxt[4][1] = 5 (4์—์„œ 1๋กœ ์ตœ์†Œ๋น„์šฉ์œผ๋กœ ๊ฐ€๋ ค๋ฉด 5๋ฅผ ๊ฑฐ์ณ์•ผ ํ•จ, 5๋กœ ์ด๋™)
-> nxt[5][1] = 1 (5์—์„œ 1๋กœ ์ตœ์†Œ๋น„์šฉ์œผ๋กœ ๊ฐ€๋ ค๋ฉด 1๋กœ ๋ฐ”๋กœ ๊ฐ€์•ผ ํ•จ, ๋„์ฐฉ!)


 ์ฆ‰, nxt[i][j]==j ๊ฐ€ ๋  ๋•Œ ๊นŒ์ง€ nxt์˜ ์‹œ์ž‘๋„์‹œ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋ฉด ๋œ๋‹ค.

 

๐Ÿ’ป ์ฝ”๋“œ (C++)

#include <iostream>
#include <vector>
#define INF 100000000
using namespace std;

int table[101][101];
int nxt[101][101];
int cnt = 2;
vector<int> path;

int main() {
	for (int i = 1; i <= 100; i++) {
		for (int j = 1; j <= 100; j++) {
			table[i][j] = INF;
		}
	}
	int n, m, a, b, c;
	cin >> n >> m;

	for (int i = 0; i < m; i++) {
		cin >> a >> b >> c;
		if (table[a][b] > c) {
			table[a][b] = c;
			nxt[a][b] = b;
		}
	}

	for (int k = 1; k <= n; k++) {
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				if (i == j) {
					table[i][j] = 0;
					continue;
				}
				if (table[i][j] > table[i][k] + table[k][j]) {
					table[i][j] = table[i][k] + table[k][j];
					nxt[i][j] = nxt[i][k];
				}
			}
		}
	}
	
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			if (table[i][j] >= INF) {
				cout << 0;
			}
			else {
				cout << table[i][j];
			}
			cout << " ";
		}
		cout << "\n";
	}

	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			if (nxt[i][j] == 0) {
				cout << 0 << "\n";
				continue;
			}
			path.push_back(i);
			int st = i;
			while (nxt[st][j] != j) {
				cnt++;
				path.push_back(nxt[st][j]);
				st = nxt[st][j];
			}
			path.push_back(j);
			cout << cnt << " ";
			for (int k = 0; k < path.size(); k++) {
				cout << path[k] << " ";
			}
			path.clear();
			cnt = 2;
			cout << "\n";
		}
	}
}

'๐Ÿ’ป Algorithms > ๋ฐฑ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€] 11403 ๊ฒฝ๋กœ ์ฐพ๊ธฐ - ๊ทธ๋ž˜ํ”„, DFS  (0) 2024.08.17
[๋ฐฑ์ค€] 1927 ์ตœ์†Œ ํž™ - ์šฐ์„ ์ˆœ์œ„ ํ  (0) 2024.08.14
[๋ฐฑ์ค€] 11404 ํ”Œ๋กœ์ด๋“œ - ํ”Œ๋กœ์ด๋“œ  (0) 2024.08.04
[๋ฐฑ์ค€] 16398 ํ–‰์„ฑ์—ฐ๊ฒฐ - MST, ์šฐ์„ ์ˆœ์œ„ ํ  (0) 2024.08.04
[๋ฐฑ์ค€] 1766 ๋ฌธ์ œ์ง‘ - ์œ„์ƒ์ •๋ ฌ, ์šฐ์„ ์ˆœ์œ„ ํ  (0) 2024.08.04
'๐Ÿ’ป Algorithms/๋ฐฑ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฐฑ์ค€] 11403 ๊ฒฝ๋กœ ์ฐพ๊ธฐ - ๊ทธ๋ž˜ํ”„, DFS
  • [๋ฐฑ์ค€] 1927 ์ตœ์†Œ ํž™ - ์šฐ์„ ์ˆœ์œ„ ํ
  • [๋ฐฑ์ค€] 11404 ํ”Œ๋กœ์ด๋“œ - ํ”Œ๋กœ์ด๋“œ
  • [๋ฐฑ์ค€] 16398 ํ–‰์„ฑ์—ฐ๊ฒฐ - MST, ์šฐ์„ ์ˆœ์œ„ ํ
์ ๋„
์ ๋„
  • ์ ๋„
    ๋„์ 
    ์ ๋„
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (30)
      • ๐Ÿ’ป Algorithms (28)
        • ๋ฐฑ์ค€ (22)
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (6)
      • ๐Ÿ”Ž Deep Learning (0)
      • ๐Ÿ’ฅ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… (1)
      • ๐Ÿ•น Unity (1)
      • ๐Ÿฅ” ์ž‰ํ…… (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • Blog
    • Github
    • Velog
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
์ ๋„
[๋ฐฑ์ค€] 11780 ํ”Œ๋กœ์ด๋“œ2 - ํ”Œ๋กœ์ด๋“œ ๊ฒฝ๋กœ๋ณต์›
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”