lys9546   4년 전

벨만포드에 대해 검색해보고

작성해본 코드입니다.

1. 아래 주석보면 memset으로 했을때는 쓰레기값이 출력되고 fill로 바꿀때는 정답이 나오던데

차이점에 대해서 질문드리고 싶습니다.

2. 처음에는 cout << -1; 이렇게 작성해서 틀려 혹시나 싶어

cout<<"-1"; 로 수정해서 정답이 나왔는데

차이점에 대해서 궁금합니다

3. 마지막 벨만포드 알고리즘에서 

아래에는 3중 for문이 나오는데  

마지막 밖에 있는 for 문대신에

2차원 for문으로 두번 돌고 

차이즘을 분별하여 음수 cycle만 찾으면 되지 않나는 의문점이 생겼습니다.

djm03178   4년 전

1. memset은 바이트 단위로 초기화하는 함수이기 때문에 255보다 큰 수는 원하는 대로 값을 넣을 수 없습니다.

2. 그럴 리가 없습니다. 코드를 봐도 cout << "-1"; 이라는 구문은 보이지 않습니다. cout << "-1\n";만 있을 뿐입니다. 정말로 cout << -1;을 한 후에도 '\n'을 출력하셨나요?

3. 그렇게 하면 모든 노드에 대한 최단거리를 구할 수 없습니다. 사이클의 길이가 1보다 큰 경우에도 사이클이 있는지 여부를 판단할 수 없습니다.

djm03178   4년 전

1번에 대해 좀 더 보충하자면, 255 이하의 수를 바이트 단위로는 정확하게 넣을 수 있지만 int가 4바이트이기 때문에 그 바이트 4개가 하나의 int에 들어가게 되므로 역시 원하는 값이 표현되지는 않습니다. memset으로 int에 원하는 대로 쓸 수 있는 수는 0과 -1 뿐입니다.

lys9546   4년 전

답변감사합니다

memset에 관해서 더 자세히 알게됬네요

2같은경우에 ₩n을 안넣었던것같네요.

벨만포드알고리즘에 대한 설명 감사합니다

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