2011-11-16 2 views
3

나는 것처럼, 체중 방향 그래프를 만들어이C에서 무한대 값 만드는 법? (expecially에 정수 값)

6 
0 3 4 INFINITY INFINITY INFINITY 
INFINITY 0 INFINITY 7 INFINITY INFINITY 
INFINITY 3 0 5 11 INFINITY 
INFINITY INFINITY INFINITY 0 6 3 
INFINITY INFINITY INFINITY INFINITY 0 4 
INFINITY INFINITY INFINITY INFINITY INFINITY 0 

처음에 내가 99 나 20000 하지만 같은 무한대를 표현하기 위해 몇 가지 정수 값을 사용 나는 그것이, V5 잘못 찾을 때 - > v4는 명시 무한대 여야하지만 일부 정수 값이 표현됩니다.

예 : V2의 V3 (길이 : 200000)

정수에 대한 무한대 값이 V2 v3으로의 최단 경로? 내

친구는 ~ (1 < < 31)라고하지만, 정수 타입이 무한대에 대한 표준 값이없는 부동 소수점 형식과 달리

답변

7

작동하지 않습니다. 가지고 있어야하는 경우 값 (예 : INT_MAX)을 직접 선택하고 코드 전체에서 올바르게 처리해야합니다. 이 작업을 수행하면 할당 및 비교에 특수 값을 사용할 수 있지만 수식에는 사용할 수 없습니다.

+0

+1 무한 부동 소수점을 int로 캐스팅하는 것은 정의되지 않은 동작입니다 (http://stackoverflow.com/questions/3986795/casting-float-inf-to-integer). – netcoder

0

편집 : 정수를 지정하는 것을 실감하지 못했습니다.

솔루션은 기본 값으로 무한대 대신 '-1'을 사용할 수 있습니다. 만약 내가 올바르게 리콜, 감독 그래프 어쨌든 부정적인 값을해서는 안됩니다.

+0

플로이드 - 와샬 (Floyd-Warshall)과 같은 모든 쌍 최단 경로 알고리즘을 적용 할 때 지시 된 그래프는 음수 값을 사용할 수 있습니다. – Programmer

3

정수에는 무한대가 없습니다. 당신의 친구가 제안한 것은 32 비트 부호있는 정수에서 가장 큰 숫자이지만 여전히 무한대가 아닙니다. 또한 무언가 (예를 들어 최단 경로)에 추가하면 오버플로 가능성이 생기므로 사실 작은 숫자가 될 수도 있습니다. 그러지 마라.

적절한 방법은 경우에 따라 무한대를 처리하는 것입니다. 같은 ~(1<<31) 또는 더 나은 경우 -1과 같은 무한대에 플래그를 사용하고 두 값을 추가 할 때마다 코드 중 하나가이 플래그 (무한대와 같음)와 같은지 확인하고 결과를 설정하십시오 실제로 아무 합계도하지 않고 무한대로. 또는 한 값이 다른 값보다 작은 지 검사 할 때이 플래그와 같거나 (무한대와 같음) 실제로 비교를 수행하지 않고 다른 값이 확실히 작 으면 확인하십시오.