본문 바로가기
알고리즘 문제풀이/SWEA

[SWEA 2814] 최장경로(JAVA)

by 소보루:-) 2020. 3. 3.

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7GOPPaAeMDFAXB

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

2차원 배열을 사용해서 연결된 노드를 표현하였다.

dfs 함수로 현재 노드와 연결된 노드이며, 이전에 들르지 않은 노드이면 cnt를 증가시켜 함수를 호출하도록 했다.

 

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

public class Solution_d3_2814_최장경로 {

	public static int N, M, ans;
	public static int[][] map;
	public static boolean[] visit;

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		int T = Integer.parseInt(br.readLine());
		for (int tc = 1; tc <= T; tc++) {
			ans=0;
			st = new StringTokenizer(br.readLine(), " ");
			N = Integer.parseInt(st.nextToken());
			M = Integer.parseInt(st.nextToken());
			map = new int[N + 1][N + 1];
			visit = new boolean[N + 1];
			for(int i=0; i<M; i++) {
				 st = new StringTokenizer(br.readLine(), " ");
				 int num1=Integer.parseInt(st.nextToken());
				 int num2=Integer.parseInt(st.nextToken());
				 map[num1][num2]=1;
				 map[num2][num1]=1;
			}
			for(int i=1; i<=N; i++) {
				visit[i]=true;
				dfs(i,1);
				visit[i]=false;
			}
			System.out.println("#"+tc+" "+ans);
		}

	}

	private static void dfs(int index, int cnt) {
		if(ans<cnt)ans=cnt;
		for(int j=1; j<=N; j++) {
			if(map[index][j]==1 && visit[j]==false) {
				visit[j]=true;
				dfs(j,cnt+1);
				visit[j]=false;
			}
		}
	}

}

'알고리즘 문제풀이 > SWEA' 카테고리의 다른 글

[SWEA 5656] 벽돌 깨기(JAVA/C++)  (0) 2020.03.10
[SWEA 5684] 운동(JAVA)  (4) 2020.03.05
[SWEA 1907] 모래성 쌓기(JAVA)  (0) 2020.03.04
[SWEA 8382] 방향 전환(JAVA)  (0) 2020.03.04
[SWEA 4534] 트리흑백색칠(JAVA)  (3) 2020.03.03

댓글