작성
·
285
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