inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

3. 경로탐색(DFS-인접리스트 : 노드개수가 많을 때 적용)

3.경로탐색의 키포인트

229

콩팥팥죽
0

ch배열을 버텍스값으로 체크해야된다는거..

강의에서 알려주지만 혼자서 할때는

깨닫기까지 시간이 좀 걸리네요 생각보다 만만치않음

pop도 깨닫는게 시간이 좀 걸렷는데

그치만 넘 잼잇네요 레벨업 하는 느낌 고고고

function solution(n,arr) {
  let answer=[];
  let graph=Array.from(Array(n),() => []);
  let ch=Array.from(Array(n+1),() => 0);
  let path=[];

  for(let i=0; i<arr.length; ++i) {
    for(let j=0; j<arr.length; ++j) {
      if(i+1===arr[j][0])
        graph[i].push(arr[j][1]);
    }
  }

  function DFS(L,v) {
    if(v===n)
      answer.push(Array.from(path));
    else {
      for(let i=1; i<=graph[v-1].length; ++i) {
          if(ch[v]===0) {
            ch[v]=1;
            path.push(graph[v-1][i-1]);
            DFS(L+1,graph[v-1][i-1]);
            ch[v]=0;
            path.pop();
        }
      }
    }
  }

  ch[0] = 1;
  path[0] = 1;
  DFS(0,1);
  return answer;
}

let arr=[[1,2],[1,3],[1,4],[2,1],[2,3],[2,5],[3,4],[4,2],[4,5]];
console.log(solution(5,arr));

답변 0