너비 우선 탐색 BFS

2021. 3. 25. 15:33·Algorithm/Memo
bool BFS(int cost)
{
	queue<int> q;
	q.push(start);
	visited[start] = true;

	while (!q.empty())
	{
		int currNode = q.front();	//현재 너비에 있는 것을 순차적으로 검색
		q.pop();	//검색한 곳은 삭제

		if (currNode == finish) return true;

		for (int i = 0; i < nodes[currNode].size(); i++)
		{
			int nextNode = nodes[currNode][i].first;
			int weight = nodes[currNode][i].second;

			if (!visited[nextNode] && cost <= weight)	//방문한 곳이 아니고 cost가 가중치보다 적을때
			{
				visited[nextNode] = true;
				q.push(nextNode);	//다음 너비(현재 for문 돌고있는)에 있는 노드들을 저장
			}
		}
	}

	return false;
}

 

BFS는  단계별로 순회한다.

현재 노드가 가지고 있는 값을 다 방문하고 현재 노드의 다음 단계에 있는 노드에 들어간다.

그 뒤에는 그 들어온 단계에 있는 노드가 가지고 있는 다음 노드들을 다 방문하는 순서이다.

 

1 - 2 - 3

l    l    l

4   5 - 6    으로 연결 되어있다고 가정하에

 

1 -> 2, 1 -> 4

 

2 -> 3, 2 -> 5

 

3 -> 6, 5 -> 6 순서이다. 하지만 5 -> 6은 간 곳이기에 가지않는다.

 

 

큐의 상황은

 

1 -> X -> 2, 4 -> 4 -> 4, 3, 5 -> 3, 5 -> 5 -> 5, 6 -> 6 -> X

 

 

 

저작자표시 (새창열림)

'Algorithm > Memo' 카테고리의 다른 글

재귀함수로 만드는 합  (0) 2021.06.08
다익스트라 알고리즘  (0) 2021.04.19
깊이 우선 탐색_DFS  (0) 2021.03.25
힙  (0) 2021.02.15
'Algorithm/Memo' 카테고리의 다른 글
  • 재귀함수로 만드는 합
  • 다익스트라 알고리즘
  • 깊이 우선 탐색_DFS
  • 힙
chanheess
chanheess
'왜' 그렇게 했는가?에 대한 생각으로 공부 및 작업의 저장관리
  • chanheess
    왜 그렇게 생각했는가?
    chanheess
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Backend Programming
      • Game Programming
        • Unreal
        • DirectX
      • C++
        • Memo
        • Basic
        • Effective Modern
      • Algorithm
        • Memo
        • Baekjoon
        • Programmers
        • HackerRank, LeetCode
      • Data Structure
      • Design Pattern
      • Etc
        • Memo
        • Daily Log
        • Book
  • 최근 글

  • 최근 댓글

  • 태그

    JPA
    dp
    Java
    백준
    오블완
    c++ 기초 플러스
    SpringSecurity
    dfs
    JWT
    위클리 챌린지
    알고리즘
    spring
    티스토리챌린지
    프로그래머스
  • hELLO· Designed By정상우.v4.10.0
chanheess
너비 우선 탐색 BFS
상단으로

티스토리툴바