자바 양방향 그래프 dfs - 2차원 행렬, 반복문, 스택, LinkedHashSet

2023. 3. 21. 23:14·정리 전 게시글/공부 관련
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String[] line = reader.readLine().split("\\s+");    // 7, 8
        int vertex = Integer.parseInt(line[0]);    // 노드
        int edge = Integer.parseInt(line[1]);    // 간선

        int[][] adjMatrix = new int[vertex + 1][vertex + 1];
        for (int[] matrix : adjMatrix) {
            Arrays.fill(matrix, 0);    // 2차원 행렬 초기화
        }

        for (int i = 0; i < edge; i++) {
            line = reader.readLine().split("\\s+");

            /*
            1 2
            1 3
            2 4
            2 5
            4 6
            5 6
            6 7
            3 7
            */

            int start = Integer.parseInt(line[0]);
            int end = Integer.parseInt(line[1]);
            adjMatrix[start][end] = 1;
            adjMatrix[end][start] = 1;    // 양방향 그래프
        }

        Stack<Integer> stack = new Stack<>();    // 현재 진행중인 스택
        stack.add(1);    // 처음 시작할 순서
        Set<Integer> visited = new LinkedHashSet<>();    // 방문했던 노드를 저장할 Set, 순서대로 출력할것이기에 LinkedHashSet 사용

        while (!stack.isEmpty()) {
            int current = stack.pop();
            visited.add(current);    // 노드를 방문했다고 추가

            for (int i = 0; i < vertex + 1; i++) {
                if (adjMatrix[current][i] == 1 && !visited.contains(i)) {
                    stack.add(i);    // 이어져있고 방문하지 않았으면 스택에 추가
                }
            }
        }

        for (Integer i : visited) {
            System.out.print(i + " ");    // 1 3 7 6 5 2 4 
        }
    }
}
저작자표시 (새창열림)

'정리 전 게시글 > 공부 관련' 카테고리의 다른 글

BFS, DFS, 최선우선탐색, 휴리스틱 알고리즘, a* 알고리즘 3X3 8퍼즐 공부  (0) 2023.03.26
[백준 1485번 문제, Python3] 정사각형  (0) 2023.03.25
운영체제 (1) ~ (3) 주차 학습 노트  (0) 2023.03.20
[프로그래머스 1Level, Java] 신고 결과 받기  (0) 2023.03.17
[프로그래머스 1Level, Python3] 신고 결과 받기  (0) 2023.03.17
'정리 전 게시글/공부 관련' 카테고리의 다른 글
  • BFS, DFS, 최선우선탐색, 휴리스틱 알고리즘, a* 알고리즘 3X3 8퍼즐 공부
  • [백준 1485번 문제, Python3] 정사각형
  • 운영체제 (1) ~ (3) 주차 학습 노트
  • [프로그래머스 1Level, Java] 신고 결과 받기
aptenia
aptenia
공부하면서 배운 것들
  • aptenia
    새벽의 아이디어
    aptenia
  • 전체
    오늘
    어제
    • 분류 전체보기 (279)
      • 논문 (0)
      • Roboracer (2)
      • 개발 아무거나 (1)
      • 일상 아무거나 (2)
      • 정리 전 게시글 (268)
        • 개발 관련 (25)
        • 정보 관련 (19)
        • 공부 관련 (224)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 네이버 블로그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    마크스크립트
    마크
    이것이자바다연습문제
    티스토리스킨편집
    마인크래프트스크립트
    이것이자바다확인문제
    캡스톤디자인
    안드로이드
    프로그래머스PCCE
    C언어
    공개SW개발자대회
    컨텍스트스위칭
    C++강좌
    티스토리HTML
    파이썬
    파이어베이스
    콜라츠추측
    마인크래프트강화스크립트
    티스토리반응형2스킨편집
    백준
    마인크래프트
    일본규슈공업대학교
    자바
    프로그래머스
    C언어강좌
    c언어초보
    이것이자바다
    빅데이터공모전
    반복하지않는수
    스크롤바CSS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
aptenia
자바 양방향 그래프 dfs - 2차원 행렬, 반복문, 스택, LinkedHashSet
상단으로

티스토리툴바