CLEANER 질문입니다

  • User Avatar
    빛나는별

    [[어떤 과학의 인공지능 청소기|problem:CLEANER]]

    위의 문제를 풀고 있는데 계속 오답이 뜨네요 ㅠㅠ
    오답이 뜨는 이유를 혼자 아무리 고민해도 못 찾겠어서 이렇게 질문글 올립니다 ㅜㅜ


    ~~~ c++
    #include

    const int MAX_SIZE = 8;

    int N , M;
    int dir[4][2] = {-1 , 0 , 0 , 1 , 1 , 0 , 0 , -1};
    int iTime[MAX_SIZE * MAX_SIZE][2];
    int pos[MAX_SIZE][MAX_SIZE];

    int endTime;
    int solve(int y , int x , int t)
    {
    if(y == N && x == M)
    return t == endTime;

    int ret = 0;
    if(pos[y][x] == -1 ||  pos[y][x] == t)
    {
        int prev = pos[y][x];
        pos[y][x] = -2;
        if(!iTime[t][0] || (iTime[t][0] == y && iTime[t][1] == x))
        {
            for(int i = 0;i < 4;i++)
            {
                int ny = y + dir[i][0];
                int nx = x + dir[i][1];
    
                if(pos[ny][nx] != -2)
                    ret += solve(ny , nx , t + 1);
            }
        }
        pos[y][x] = prev;
    }
    
    return ret;
    

    }

    int main(void)
    {
    int T;
    for(scanf("%d" , &T);T--;)
    {
    scanf("%d %d" , &N , &M);

        endTime = N * M - 1;
        for(int i = 0;i <= endTime;i++)
            iTime[i][0] = iTime[i][1] = 0;
    
        for(int i = 1;i <= N;i++)
        {
            pos[i][0] = pos[i][M + 1] = -2;
            for(int j = 1;j <= M;j++)
            {
                scanf("%d" , &pos[i][j]);
                int t = pos[i][j];
                if(t != -1)
                    iTime[t][0] = i , iTime[t][1] = j;
            }
        }
    
        for(int i = 1;i <= M;i++)
            pos[0][i] = pos[N + 1][i] = -2;
    
        printf("%d\n" , !(N & 1) && !(M & 1) ? 0 : solve(1 , 1 , 0));
    }
    return 0;
    

    }
    ~~~


    13년 전
2개의 댓글이 있습니다.
  • User Avatar
    astein

    마지막 줄 마지막 칸의 숫자가 N * M - 1 이라는 조건을 만족하지 않는 데이터가 일부 있었네요.

    데이터 수정하고 재채점 하였습니다. 제보 감사합니다 :)


    13년 전 link
  • User Avatar
    빛나는별

    앗 문제의 오류였군요 ㅜㅜ
    감사합니다


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