kyaryunha   6년 전

일단ㄴ... 입력 예시도 틀리게 나오는 코드입니다..!!

각 대포를 하나의 정점이라 보고,


double x = fabs(crd[i][0]-crd[j][0]);
double y = fabs(crd[i][1]-crd[j][1]);
double len=hypot(x,y);
adj[i][j]=min((len/5),fabs((len-50)/5)+2 );


이 부분이 처음에 좌표 입력 받은 것으로부터 간선ㄴ을 생성하는 코드고요..!! // 간선은 시간 값을 기준으로..!

그 다음ㅁ은 그냥 다익스트라 ...인 코드입니다.!! // crd는 좌표..!!


인데..!! 입력 예시와 틀리게 나오네요 +ㅁ+.....


어음ㅁ 근데ㅔ 제가 컴파일러를 그냥ㅇ 초기 세팅(??) 상태로 쓰는데, 그랬을때는 15.57이 뜨고,

c++11로 하고 하니깐 무슨ㄴ 0.00 이 떠버리는...... (( 왜이러지ㅣ... ))

한참동안ㄴ 생각해봤는데ㅔ 왜 틀렸는지도 모르겠고, 왜 c++11쓰니깐 다르게 뜨는지도 모르겠고,........ .. ... ...

질문해봅니다 ㅠㅠ

양쪽 컴파일러 다 혹시나 fabs말고 abs써봤는데ㅔ 그럼 그냥ㅇ 컴파일 에러 뜨고요..!!


혹시나 도와주시면 감사합니다..!! 

chogahui05   6년 전

이거 좀 어렵죠.. 처음 위치와 끝 위치는 대포가 없다는 거 주의하셔야 하구요..

저도 이거 풀 때 그거 간과해서 인풋이 제대로 안 나왔습니다.

대포가 있는 지점 A에서 아무 지점이나 이동한다 칩시다.

(1) 걸어가는 경우 이 때는 그냥 직코스로 가는 게 최선입니다. 이건 반박불가죠.


(2) 문제는 대포를 타고 날라가는 경운데..

이거 생각보다 최단 거리를 보이는 게 꽤 어려운데.. 한번에 잘 하셨네요.

만약에 A에서 어느 지점의 거리가 50 이상이면 처리를 잘 하신 거 같은데.

50 미만이면 어케 처리되나요?

kyaryunha   6년 전


답변 감사합니다 :)


adj[i][j]=min((len/5),fabs((len-50)/5)+2 );


요거 보면ㄴ 앞에가
1. len/5라서 대포 안타고 날라가는거고..!

뒤에가 fabs(<-절댓값 함수..!)라 
2. 50이상이면 50만큼 날아가고 쫌 더 걸어가고요..!
3. 50미만이면 50만큼 날아가고  다시 걸어 돌아와요..!

1번과 2,3번 중 최소인거 택하고요..!!..

+ㅁ+ 거리 50미만이면 이렇게 하는거 아닌가요((???))



++왜 c++!1 컴파일러에서는 0.000을 출력하는지 뜨는지 모르겠어요..!

chogahui05   6년 전

3에 대한 식을 잘 모르겠네요. (len - 50)/5 + 2가 아닐 거 같은데요..

kyaryunha   6년 전

엥ㅇ.. 아 (len-50)/5+2가 아니라 fabs앞에 붙여놔서

 (50-len)/5+2이긴 한데

이 식이 맞다고 생각한 이유는 아래와 같고요

가운데 빨간점에서 가장자리 죠기 빨간점을 가려할때,
일단 50가고, 그다음ㅁ 다시 되돌아오는데 되돌아 오는 거리가 50-len이라 거기에 속력 나눠줘서 50-len/5..
첨에ㅔ 50가니깐 그거 2 더해주고요..!!

asdfd.png

kyaryunha   6년 전

혹시ㅣ 어떤 오류가 있는지 알려주실 수 있나요?? +ㅁ+ 

chogahui05   6년 전

아 앞에 fabs 있는 거 깜빡했었네요. ㄷㄷ 왠만해선 맞을 텐데..

0번과 1번 위치에서 포탄이 없다는 거 고려하셨나요?

kyaryunha   6년 전

헐ㄹ 그걸 고려안했었어요..!! 그것만ㄴ 고치니 바로 맞는..!! ((전 코딩ㅇ 할때 대체ㅔ 문제 제대로 안읽는 건지ㅣ 그냥ㅇ 댕청한건지ㅣ..))

쨋든 감사합니다~!!!!!!((틀렸습니다 목록 줄어서 기분 날아감~!~!!))

++ 뭔가ㅏ 학교컴에서 c++11로 컴파일 하면 0.000 출력하는데, 이상하게도 제출로 하면 c++!1이나 c++14나 다 맞았습니다! 뜨는것봐서 그냥ㅇ 이건 별 문제 없는거겠죠(??)

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