그래프 순회

2022. 9. 10. 21:56·알고리즘(Algorithm)
728x90
반응형

실생활 예시

*Peer to peer networking(P2P)

=> 개인 대 개인 통신망 (중앙 서버 없이 컴퓨터끼리 서버,클라이언트 역할 -> 서로 연결해서 파일 주고 받기)

https://ko.wikipedia.org/wiki/P2P

가장 가까운 것을 찾거나 최단 거리 검색

GPS, 미로 풀기, AI

 

 

DFS(깊이 우선 탐색)

재귀와 순회의 순서는 다름 -> 그래프를 리스트로 나타냈을 때 재귀는 배열의 앞부분부터 노드가 빠지도록 동작을 하지만

순회는 pop메서드로 인해서 배열의 뒷부분이 먼저 빠진다

1) 재귀

  depthFirstRecursive(start){
      const result = [];
      const visited = {};
      const adjacencyList = this.adjacencyList;

      (function dfs(vertex){
          if(!vertex) return null;
          visited[vertex] = true;
          result.push(vertex);
          adjacencyList[vertex].forEach(neighbor => {
              if(!visited[neighbor]){
                  return dfs(neighbor)
              }
          });
      })(start);

      return result;
  }

2) 순회

  depthFirstIterative(start){
    const stack=[start];
    const result=[]
    const visited={};
    visited[start]=true;
    let currentVertex
    while(stack.length){
      currentVertex=stack.pop()
      result.push(currentVertex)

      this.adjacencyList[currentVertex].forEach(neighbor=>{
        if(!visited[neighbor]){
          visited[neighbor]=true
          stack.push(neighbor)
        }
      });
    }
    return result
  }

BFS(너비 우선 탐색)

  breadthFirst(start){
    const queue=[start]
    const result=[]
    const visited={}
    visited[start]=true
    let currentVertex

    while(queue.length){
      currentVertex=queue.shift()
      result.push(currentVertex)
      //slice().reverse()로 하게되면 순서 반대
      this.adjacencyList[currentVertex].forEach(neighbor=>{
        if(!visited[neighbor]){
          visited[neighbor]=true
          queue.push(neighbor)
        }
      })
    }
    return result
  }
728x90
반응형
저작자표시 (새창열림)

'알고리즘(Algorithm)' 카테고리의 다른 글

프로그래머스 시저 암호 [JS]  (0) 2022.12.17
unsigned int  (0) 2022.10.04
그래프  (0) 2022.08.31
해시 테이블(HASH TABLES)  (0) 2022.08.30
힙 + 우선 순위 큐  (0) 2022.08.26
'알고리즘(Algorithm)' 카테고리의 다른 글
  • 프로그래머스 시저 암호 [JS]
  • unsigned int
  • 그래프
  • 해시 테이블(HASH TABLES)
Hun-bot
Hun-bot
IT를 중심으로 다양한 것
  • Hun-bot
    로봇이 만드는 눈사람
    Hun-bot
  • 전체
    오늘
    어제
    • All Article (128)
      • Programmers (6)
        • TIP (1)
        • SQL (2)
        • LV1 (1)
        • LV2 (2)
        • LV3 (0)
      • Baekjoon (31)
        • Bronze (10)
        • Silver (19)
        • Gold (2)
        • Platinum (0)
        • Diamond (0)
      • Leetcode (0)
        • Easy (0)
        • Medium (0)
        • Hard (0)
        • SQL (0)
      • 알고리즘(Algorithm) (42)
      • JavaScript (40)
      • Linux (7)
      • JSP (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      Javascript
      자바스크립트
      리눅스
      Algorithm
      JS #정규표현식
      async await #js #문법 #자바스크립트 #비동기
      JS #javascript #객체 #Object
      Python #알고리즘
      SQL
      JS #JavaScript #프로그래머스 #알고리즘
      c++
      알고리즘
      JS #JavaScript #프로그래머스 #카카오
      프로그래머스
      고득점 Kit
      알고리즘 #Algorithm
      Vue #Vue.js #정리
      BaekJoon
      JSP #Vscode #톰켓 #Tomcat #Java #Web #jdk
      JavaScript #Set #Collection
      오블완
      리눅스 #입문
      JS #클래스
      JS #프로그래머스 #숫자의표현 #알고리즘
      자바스크립트 #연습문제
      티스토리챌린지
      파이썬 #입력 #python #input
      Programmers
      LeetCode #JS #Javascript #Algorithm
      프로그래머스 #자바스크립트 #JS
    • 최근 댓글

    • hELLO· Designed By정상우.v4.10.3
    Hun-bot
    그래프 순회
    상단으로

    티스토리툴바

    티스토리툴바