• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

BFS함수의 두 번째 while문 조건에 대하여

21.02.15 07:08 작성 조회수 221

0

BFS함수의 두 번째 while문은

while (parent[y, x].Y != y || parent[y, x].X != x)

            {

                _points.Add(new Pos(y, x));

                y = parent[y, x].Y;

                x = parent[y, x].X;

            }

이렇게 가르쳐주셨습니다.

그런데 제가 조건을 while (parent[y, x] != new Pos(y, x)) 로 수정을 해도 되지 않을까 싶어서 시도해보았는데 무한루프에 걸려버리더라구요. y, x의 부모가 자기 자신과 동일하다면 출발점이므로 강사님께서 가르쳐주신 조건과 같은 것이 아닌가요?

고민을 해보고 있는데 Pos라는 클래스를 새롭게 생성하게 되면 좌표는 동일하더라도 다른 주소를 가리키게 되는 것이기 때문에

parent[y, x] != new Pos(y, x) 라는 조건이 true가 될 수 없는 것인가요?

답변 2

·

답변을 작성해보세요.

2

고민을 해보고 있는데 Pos라는 클래스를 새롭게 생성하게 되면 좌표는 동일하더라도 다른 주소를 가리키게 되는 것이기 때문에 parent[y, x] != new Pos(y, x) 라는 조건이 true가 될 수 없는 것인가요?

-> 그렇습니다. '기본적'으로는 참조값을 비교하기 때문에, 둘이 다르다고 인식하는거죠.
하지만 방법이 없진 않습니다!

== 와 != 연산자가 어떤 일을 하는 것인지를
우리가 명시적으로 재정의 할 수 있는데,
위와 같이 하면 !=를 하더라도 참조값을 비교하는게 아니라
실제 안에 들어가 있는 y, x를 이용해 비교하게 됩니다.

0

안유선님의 프로필

안유선

질문자

2021.02.16

감사합니다!