도대체 어디에서 에러가 나는지 모르겠습니다.

  • xorox90
    xorox90

    에러 메시지

    RTE (SIGSEGV: segmentation fault, probably incorrect memory access)
    참으로 난감하네요..
    이 에러가 어디서 난 것인지도 잘 모르겠고요

    소스 코드

    #include <stdio.h>
    #include <math.h>
    
    double edge[150][150];
    bool visit[150];
    int jump,stone;
    int point[150][2]={0};
    int start[2],end[2];
    
    double distance(double xa, double ya, double xb, double yb){
        return sqrt(pow(xa-xb,2.0)+pow(ya-yb,2.0));
    }
    
    bool survive(int i){
        bool ret=false;
        //printf("i %d\n",i);
    
        visit[i]=true;
    
        if(distance(end[0],end[1], point[i][0],point[i][1])<=jump)
        return true;
    
        for(int k=0; k<stone; k++){
            if(!visit[k] && edge[i][k]!=0 && edge[i][k]<=jump)
                ret|=survive(k);
        }
    
        return ret;
    }
    
    int main(){
        int tc;
        FILE* fp=stdin;
        fscanf(fp,"%d", &tc);
        int i,j,k;
        for(k=0; k<tc; k++){
            fscanf(fp,"%d", &jump);
    
    
            fscanf(fp,"%d %d %d %d", &start[0], &start[1], &end[0], &end[1]);
            fscanf(fp, "%d", &stone);
            for(i=0; i<stone; i++)
                fscanf(fp, "%d %d", &point[i][0], &point[i][1]);
    
    
    
            for(i=0; i<stone; i++){
                for(j=0; j<stone; j++){
                    edge[i][j] = distance(point[i][0],point[i][1],point[j][0],point[j][1]);
                    //edge[j][i]=edge[i][j];
                    //printf("edge %lf %d %d \n", edge[i][j], i,j);
                }
            }
            bool ret=false;
            for(i=0; i<stone; i++){
                if(distance(start[0],start[1], point[i][0],point[i][1])<=jump)
                ret|=survive(jump);
            }
    
            if(ret) printf("YES\n"); else printf("NO\n");
    
        }
    }
    

    10년 전
3개의 댓글이 있습니다.
  • xorox90
    xorox90

    아 참 문제는 http://algospot.com/judge/problem/read/BRAVEDUCK 입니다. 쉬운문제인데 visit를 초기화 안해서 틀리고 막 그러네요.. 이 소스에도 visit 초기화 코드가 없긴 합니다만..그럼 오답이 나와야할텐데 RTE가 나와서 당황스럽습니다;


    10년 전 link
  • Kureyo
    Kureyo

    survive jump가 의도가 아니신거같네요


    10년 전 link
  • xorox90
    xorox90

    에 고민 해결이네요 감사합니다


    10년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.