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

  • User Avatar
    xorox90

    에러 메시지

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

    소스 코드
    ~~~ c++
    #include
    #include

    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");
    
    }
    

    }
    ~~~


    12년 전
3개의 댓글이 있습니다.
  • User Avatar
    xorox90

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


    12년 전 link
  • User Avatar
    Kureyo

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


    12년 전 link
  • User Avatar
    xorox90

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


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