BRAVE DUCK 오답 이유를 모르겠어요...

  • ysy
    ysy

    안녕하세요.
    BRAVE DUCK 문제를 BFS 전수 탐색을 이용해 풀어보았는데요.

    주어진 예제는 답이 옳게 나오는 걸 확인했는데,
    오답 결과를 받게되네요...

    제 코드에 어떤 논리적 오류가 있는걸까요...ㅠㅠ
    도와주세요!!!

    #include <stdio.h>
    int gStartX;
    int gStartY;
    int gFinishX;
    int gFinishY;
    int gJump;
    
    int gDx[] = {0, 1, 0, -1};
    int gDy[] = {-1, 0, 1, 0};
    int gArr[2001][2001] = {0};
    int gSelected[2001][2001] = {0};
    
    int gFlag;
    
    void braveDuck(int x, int y, int jumpCount)
    {
        if(jumpCount > gJump || gFlag == 1)
        {
            return;
        }
    
        int i;
        for(i=0; i<4; i++)
        {
            if(gFlag == 1)
                break;
    
            int tempX = x + jumpCount*gDx[i];
            int tempY = y + jumpCount*gDy[i];
    
            if((tempX < 0 || tempX > 2000) || (tempY<0 || tempY>2000))
                continue;
    
            if(tempX == gFinishX && tempY == gFinishY)
            {
                gFlag = 1;
                break;
            }
    
    
            if(gArr[tempX][tempY] == 1 & gSelected[tempX][tempY] != 1)
            {
                if(jumpCount > 1)
                    jumpCount = 1;
    
                gSelected[tempX][tempY] = 1;
                braveDuck(tempX, tempY, jumpCount);
            }
            else
            {
                if(i==3)
                {
                    ++jumpCount;
                    //printf("increase jump - x : %d, y : %d, jump : %d\n", tempX, tempY, jumpCount);
                    braveDuck(x, y, jumpCount);
                    //jumpCount --;
                }
    
                else
                    continue;
            }
    
        }
    }
    int main()
    {
        int testCase;
        scanf("%d", &testCase);
        int tcCount;
    
        for(tcCount = 0; tcCount < testCase; tcCount++)
        {
            gFlag = 0;
    
            scanf("%d", &gJump);
    
            scanf("%d", &gStartX);
            scanf("%d", &gStartY);
            scanf("%d", &gFinishX);
            scanf("%d", &gFinishY);
    
            gStartX += 1000;
            gStartY += 1000;
            gFinishX += 1000;
            gFinishY += 1000;
    
            gSelected[gStartX][gStartY] = 1;
            gArr[gStartX][gStartY] = 1;
            gArr[gFinishX][gFinishY] = 1;
    
            int stoneNum;
            scanf("%d", &stoneNum);
    
            int i;
            for(i=0; i<stoneNum; i++)
            {
                int index1, index2;
                scanf("%d %d", &index1, &index2);
                index1 += 1000;
                index2 += 1000;
                gArr[index1][index2] = 1;
            }
    
            braveDuck(gStartX, gStartY, 1);
    
            if(gFlag == 0)
                printf("NO\n");
            else
                printf("YES\n");
    
            // init
            int j, k;
            for(j=0; j<2001; j++)
            {
                for(k=0; k<2001; k++)
                {
                    gSelected[j][k] = 0;
                    gArr[j][k] = 0;
                }
            }
    
        }    
    
        return 0;
    }
    

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