dsa2341   4년 전

다른 분의 코드를 가져왔는데요 DFS함수의 첫 for문에서 min함수를 

#define min(a,b) (((a)<(b)) ? (a):(b))을 추가 한 것과 추가 안 한 것이 결과값이 다르게 나오는데 왜 이런 현상이

일어나나요?

매크로함수min이랑 c++기본 라이브러리에서 제공되는 함수 min이랑 어떤  차이가 있는건가요?

chogahui05   4년 전

아래와 같이 해보시겠어요?

result = min(result, DFS(next)); 는 다음과 같이 확장됩니다.

result = ((result<DFS(next))?result:DFS(next));

result보다 DFS(next)가 큰 경우, DFS(next)가 2번 호출되면서 값을 overwrite 할 수 있어요.

chogahui05   4년 전

min 함수를 호출하는 경우에는

caller

min(result, DFS(next))

callee

min(a , b)

callee에서 요런 식으로 받기 때문에, DFS(next)를 2번 호출할 일이 없습니다.

dsa2341   4년 전

아 매크로함수에 함수를 직접 넣으면 2번 호출될 수가 있군요 정말 감사합니다

댓글을 작성하려면 로그인해야 합니다.