Algorithm/๋ฐฑ์ค€

11404๋ฒˆ - ํ”Œ๋กœ์ด๋“œ

giraffe_ 2022. 4. 6. 18:37

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

 

11404๋ฒˆ: ํ”Œ๋กœ์ด๋“œ

์ฒซ์งธ ์ค„์— ๋„์‹œ์˜ ๊ฐœ์ˆ˜ n์ด ์ฃผ์–ด์ง€๊ณ  ๋‘˜์งธ ์ค„์—๋Š” ๋ฒ„์Šค์˜ ๊ฐœ์ˆ˜ m์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์…‹์งธ ์ค„๋ถ€ํ„ฐ m+2์ค„๊นŒ์ง€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฒ„์Šค์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋จผ์ € ์ฒ˜์Œ์—๋Š” ๊ทธ ๋ฒ„์Šค์˜ ์ถœ๋ฐœ ๋„์‹œ์˜ ๋ฒˆํ˜ธ๊ฐ€

www.acmicpc.net

 

 

 

 

 

๋ฌธ์ œ์˜ ์ œ๋ชฉ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ํ”Œ๋กœ์ด๋“œ-์™€์ƒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์“ฐ๋Š” ๋ฌธ์ œ์ด๋‹ค. ๊ณจ๋“œ4๋ผ๋Š”๋ฐ ๋‹ค๋ฅธ ๊ณจ๋“œ ๋ฌธ์ œ์— ๋น„ํ•˜๋ฉด ๋œ ๊นŒ๋‹ค๋กœ์šด ํŽธ์ด์˜€๋‹ค. ํ”Œ๋กœ์ด๋“œ-์™€์ƒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž˜ ์•Œ๊ณ  ๋ฌธ์ œ์˜ ์กฐ๊ฑด๋งŒ ์ž˜ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์˜  DFS&BFS ๋ฌธ์ œ๋ณด๋‹ค ์ƒ๋Œ€์ ์œผ๋กœ ์‰ฝ๊ฒŒ ๋А๊ปด์ง„๋‹ค.

 

 

๋ฌธ์ œ์˜ ์กฐ๊ฑด๋“ค์„ ๊ผผ๊ผผํžˆ ์ฝ์–ด์•ผ ํ•œ๋‹ค.

"์‹œ์ž‘ ๋„์‹œ์™€ ๋„์ฐฉ ๋„์‹œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋…ธ์„ ์€ ํ•˜๋‚˜๊ฐ€ ์•„๋‹ ์ˆ˜ ์žˆ๋‹ค", "๋งŒ์•ฝ, i์—์„œ j๋กœ ๊ฐˆ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ทธ ์ž๋ฆฌ์— 0์„ ์ถœ๋ ฅํ•œ๋‹ค."์— ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค.

 

99%์ฏค์—์„œ ๋ฌธ์ œ๊ฐ€ ํ‹€๋ฆฌ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๋ฐ ์งˆ๋ฌธ ๊ฒŒ์‹œํŒ์—์„œ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ธ€๊ณผ ๋‹ต๋ณ€์„ ์ฐพ์•„์„œ ๋ณด๋‹ˆ INF๋ฅผ ์ž‘์€ ์ˆ˜๋กœ ์„ค์ •ํ•ด์„œ ๊ทธ๋ ‡๋‹ค๊ณ  ํ•œ๋‹ค. ์™„์ „ํžˆ ํฐ ์ˆ˜๋กœ ๋ฐ”๊ฟ”์คฌ๋”๋‹ˆ ๋งž์•˜๋‹ค๊ณ  ๋‚˜์˜จ๋‹ค.

 

 

 

 

 

์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Floyd_warshall {
	static int INF = 987654321;
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int n = Integer.parseInt(br.readLine());
		int m = Integer.parseInt(br.readLine());
		
		int[][] arr = new int[n + 1][n + 1];
		
		for(int i = 1; i < n + 1; i++) { //๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
			for(int j = 1; j < n + 1; j++) {
				if(i == j) {
					arr[i][j] = 0;
					continue;
				}
				arr[i][j] = INF;
			}
		}
		
		for(int i = 0; i < m; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			int c = Integer.parseInt(st.nextToken());
			
			arr[a][b] = Math.min(arr[a][b], c);
		}
		
		for(int k = 1; k < n + 1; k++) { //ํ”Œ๋กœ์ด๋“œ-์™€์ƒฌ
			for(int i = 1; i < n + 1; i++) {
				for(int j = 1; j < n + 1; j++) {
					arr[i][j] = Math.min(arr[i][j], arr[i][k] + arr[k][j]);
				}
			}
		}
		
		for(int i = 1; i < n + 1; i++) { //์ถœ๋ ฅ
			for(int j = 1; j < n + 1; j++) {
				if(arr[i][j] == INF) {
					arr[i][j] = 0;
				}
				System.out.print(arr[i][j] + " ");
			}
			System.out.println();
		}
	}

}

 

 

 

 

 

๊ฒฐ๊ณผ