inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘

BFS를 이용한 길찾기 구현

두 갈래 이상의 길이에서 판단은 어떻게 되는건가요?

532

홍키

작성한 질문수 3

1

두 갈래 이상 나뉘어진 구간(길이가 같다면)에서는 어떻게 판단하고 나아가는지 이해가 되지 않아 구글링을 좀 해봤는데

두 갈래로 나뉘어져 있는 구간은 큐에서 두 좌표를 모두 큐에 넣고 큐에서 하나씩 꺼내 그 지점과 근접한 방문하지 않은 지점을 방문하게 된다는데  글이 있더라구요

이 말이 알 것 같으면서도 잘 이해가 되지 않습니다.

두 갈래에서는 어떻게 판단하고 앞으로 나아가나요?

그냥 두갈래중 먼저 발견한 정점으로 가는 건가요?

파란점이 시작점이라고 할때 만약 위 오른쪽 아래 왼쪽 순서로 for문을 돌면 오른쪽 점을 먼저 발견하니까 오른쪽으로 가게되고 결국 막히게 되는데 

일단 오른쪽으로 계속 이동하다가 막히게 되면 

다음으로 갈 수 있는 아래쪽 점으로 이동하고 이런식으로 반복하여

최단경로를 찾게 되는건가요?

bfs C#

답변 3

0

Rookiss

그렇지 않습니다.
말씀하신건 DFS 로직이고 BFS는 그렇게 동작하는게 아닙니다.

BFS에서는 우측으로 막힐 때까지 쭉~ 가는게 아니라
예약된 순서대로 하나씩 접근하기 때문에
실제 접근 순서는 위와 같습니다.
말 그대로 시작점에서 가까운 순서대로 하나씩 접근해보게 됩니다.

큐에다 예약하는 순서를 유심히 분석해보시기 바랍니다.
초창기에 시작점을 큐에다 넣고, 
이를 다시 빼서 인근 지점 (거리가 1인 애들) 둘을 발견해서 다시 큐에 넣게 됩니다.
그 다음 1인 정점 하나를 빼서, 거리가 2인 애들을 발견하게 됩니다.
그렇다고 거리가 2인 애를 바로 방문하는 것은 아니고,
먼저 예약되어 있는 나머지 1도 방문을 한 다음에 2를 방문하는 것이죠.
이 부분이 처음 배울 땐 헷갈리는데 찬찬히 분석해보시기 바랍니다.

0

홍키

제가 이해한게 맞을까요?

위 사진의 파란점이 시작점이고 위 오른쪽 아래 왼쪽 순서대로 for문을 돈다면 오른쪽 점을 먼저 발견하니깐 오른쪽으로 가다가 막혀있으니깐 다시 갈 수 있는 아래쪽으로 가는데 이러한 과정을 반복해서 갈 수 있는 점들을 저장하여 최단거리를 파악한다. 라고 이해했는데 맞을까요?

0

Rookiss

두 갈래 길이 있고, 그 두 길 모두 처음 발견하는거라면
둘 중 아무 쪽이나 선택해서 갑니다. (큐에 넣은 순서대로)
현재 bfs 테스트 코드에서는 인덱스 순서로 0~6 검사를 하니
인덱스가 낮은 애부터 방문하겠지만,
실제로 이 순서는 유동적으로 코드를 만들기 나름입니다.

두 갈래로 나뉘어져 있는 구간은 큐에서 두 좌표를 모두 큐에 넣고 큐에서 하나씩 꺼내 그 지점과 근접한 방문하지 않은 지점을 방문하게 된다는데  글이 있더라구요

bfs의 코드를 유심히 보면, 
1) 큐에다가 방문 예약을 하고
2) 큐에서 꺼내 해당 지점을 방문하고
3) 방문 지점에 인근한 지점들 중, 방문하지 않은 지점을 다시 큐에 넣고

이런 반복 루틴으로 되어 있습니다.
그러니 큐에서 하나씩 꺼내, 그 지점과 근접한 '방문하지 않은' 지점을 방문하게 되겠죠.

게임개발에서 주로 어느부분에 알고리즘들이 쓰이는지 궁금합니다

0

176

2

글꼴 바꿔도 자간이 좁아 찌그러져보이시는 분들

0

89

1

NullReferenceException 예외) 같은 실수하시는분 계실까봐 남겨요

0

68

1

parent를 Pos타입으로 만든 이유

0

74

1

콘솔창에 격자가 안나옴 미로 생성 X

0

136

1

격자 생성 안됨 무한루프

0

114

1

BFS 질문

0

143

2

격자 무한 출력

0

168

2

A* 의 PriorityQueue 관련 질문입니다

0

157

2

vscode에서 원그리기

0

183

1

환결설정 강의 원 그리기

0

122

1

15-17분

0

87

1

3:16초에 근데 이렇게 해가지고 부분에 "{}"를 만들어서 자식 node들을 생성하던데 왜 중괄호로 감싸게 만드는 건가요?

0

141

2

동적 배열 관련 질문입니다!

0

209

1

Big-o 표기법에서 시간 복잡도

0

167

1

7:40에서 언급하신 색상이 날아가는 문제 이해를 못하겠습니다

0

151

1

트리구현연습 강의 질문있어요

0

143

1

창은 뜨는데 맵이 나타나지 않아요.

0

176

1

Ctrl F5 하면 나오는 창은 어디서 설정할까요??

0

273

1

void CalcPathFromParent(Pos[,] parent)에 대해서

0

203

2

NullReferenceException예외가 발생했을때 어떻게 해야하나요?

0

230

1

[해결] 환경설정 강의에서 원이 이상하게 그려지는 문제

3

315

2

오른손 법칙에서 플레이어 점이 안 움직입니다

0

246

2

맵 만들기 오류

0

179

1