본문 바로가기

알고리즘

BFS

---------------------------------------------(tip1)---------------------------------------------

        0        1        2        3    . .    m 열의갯수

 

 0    (x,y)

 

 1

 

 2

 

 3

 .

 .

 n

행의갯수

---------------------------------------------(tip2)-----------------------------------------------

 전역 변수로 설정한 int 들은 0으로 초기화 된다.

 

---------------------------------------------(tip3)-----------------------------------------------

#  pair<int,int> p;

      p.first  p.second

 

# tuple<int,int,int> tup;

     get<0>(tup);

     get<1>(tup);

     get<2>(tup);

---------------------------------------------(tip4)-----------------------------------------------

 

tuple<intchardouble> t;

FloodFill

ㄴ //1.실제보드//2.방문 보드//3.상하좌우 //4.다음 방문 포인트(Q)



미로 최장거리 찾기

ㄴ //1.실제보드크기만큼의-1배열//2.실제보드를-1로 만들어서 방문보드 없애기//3.상하좌우//다음방문포인트Q

 

 

 

시작점이 두개인 토마토

ㄴ //1.실제보드//2.방문보드(0으로초기화)//3.상하좌우//4.다음방문포인트//5.날짜카운트(방문보드에 기록)  //큐에 시작점 여러개 넣고 시작

 

 

3차원의 토마토

ㄴ//1.실제보드//2.방문보드//3.상하좌우앞뒤(6칸)//4.다음방문포인트Q(pair<int,pair<int,int>>)//5.날짜카운트(방문보드기록) 

 

스타트링크

ㄴ 왜 DFS 는 안되고 BFS 만 되는가?

   ㄴ  나중에 도달한 방법이 더 빠를수 있지만, 우리는 그를 신경안써도 된다. 가장 먼저 찾은 방법만 제시하면 되기ㅒ문.

   ㄴ  bfs 알고리즘은 최단 거리를 계산해주는 알고리즘

---------------------------------------------(tip4)-----------------------------------------------

  방문에 대한기록은 ,

   q.push 하면서 동시에 이루어져야 한다.

  그렇지 않으면 무한반복 또는 메모리 초과를 맞이함

 

---------------------------------------------(tip5)-----------------------------------------------

배열의 크기가 커지면 전역변수로 사용한다.

 

---------------------------------------------(tip5)-----------------------------------------------

1) 그래프의 모든 정점을 방문하는 것이 주요한 문제

단순히 모든 정점을 방문하는 것이 중요한 문제의 경우 DFS, BFS 두 가지 방법 중 어느 것을 사용하셔도 상관없습니다.

둘 중 편한 것을 사용하시면 됩니다.

2) 경로의 특징을 저장해둬야 하는 문제

예를 들면 각 정점에 숫자가 적혀있고 a부터 b까지 가는 경로를 구하는데 경로에 같은 숫자가 있으면 안 된다는 문제 등, 각각의 경로마다 특징을 저장해둬야 할 때는 DFS를 사용합니다. (BFS는 경로의 특징을 가지지 못합니다)

 

3) 최단거리 구해야 하는 문제

미로 찾기 등 최단거리를 구해야 할 경우, BFS가 유리합니다.

왜냐하면 깊이 우선 탐색으로 경로를 검색할 경우 처음으로 발견되는 해답이 최단거리가 아닐 수 있지만, 
너비 우선 탐색으로 현재 노드에서 가까운 곳부터 찾기 때문에경로를 탐색 시 먼저 찾아지는 해답이 곧 최단거리기 때문입니다.

 

이밖에도 

- 검색 대상 그래프가 정말 크다면 DFS를 고려
- 검색대상의 규모가 크지 않고, 검색 시작 지점으로부터 원하는 대상이 별로 멀지 않다면 BFS

 



출처: https://devuna.tistory.com/32 [튜나 개발일기📚]

'알고리즘' 카테고리의 다른 글

unordered map (C++)  (0) 2020.09.08
소수를 구하는 방법  (0) 2020.08.21
cin과 cout 으로 인한 시간초과 잡는 2가지팁  (0) 2020.04.23
[c++ stl] vector  (0) 2020.04.20
[c++ : stl] list  (0) 2020.04.19