일단 런타임 에러가 발생한 원인은 배열 인덱스 초과때문입니다.
지금 보시면 chk배열을 chk[20001] 으로 잡았는데 20000보다 더 큰 i로 chk[i]를 접근하려 하고있습니다.
어디서 일까요?
for
(i = 1; i <= v; i++)
{
if
(chk[i] == 0 && big.first >= dis[i])
{
big.first = dis[i];
big.second = i;
}
}
이 부분인데요..
엥? 1≤V≤20,000 니까 안전범위 아니냐고요?
저 for문의 v값이 어디서 왔는지를 추적해봅시다
void
dij(
int
k,
int
v)
이렇게 dij 함수 인자로 v를 사용하고 있는데
int
main()
{
...
dij(k, e);
...
return
0;
}
main 함수에서 저 v에 대응하는 값으로 e를 넘겨주고 있습니다.
e값의 범위는 1≤E≤300,000 이므로
dij 함수에서 사용하는 v변수의 값의 범위도 1≤v≤300,000 이고,
따라서 i가 300,000까지 커질 수 있게 됩니다....ㄷㄷ
그러니 일단
void dij(int k) 로 바꾸고,
while문 안의 첫번째 for문을 i=1 ~ e 로 바꿔봅시다.
그럼 안정적으로 시간초과를 받으실 수 있답니다. (???)
어디가 또 문제인지는....음...일단 힌트를 드리면
while(s != v) 아래로 한 3줄 정도를 고칠 필요가 있네요
meme0724 9년 전
비주얼 스투디오에서는 제대로 실행이 되는데
여기서 채점을 하려고 하면은 런타임 에러가 뜨네요
무슨 문제가 있는건가요?