Submission #2965440


Source Code Expand

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct _queue {
    int x, y;
    struct _queue *next;
} queue;

queue *que;
queue *last;

queue* new(int x, int y) {
    queue *_que;
    _que = (queue*)malloc(sizeof(queue));
    _que->x = x;
    _que->y = y;
    _que->next = NULL;
    return _que;
}

void push(int x, int y) {
    queue *new_queue = new(x, y);
    if (que == NULL) {
        que = new_queue;
        last = new_queue;
    } else {
        last->next = new_queue;
        last = new_queue;
    }
}

void pop(int *rx, int *ry) {
    *rx = que->x;
    *ry = que->y;
    queue *old = que;
    que = que->next;
    free(old);
    if (que == NULL) last = NULL;
}

int main() {
    char mp[64][64];
    int ret[64][64];
    int dir[4][2] = {{-1,0}, {1,0}, {0,-1}, {0,1}};
    int r, c, sy, sx, gy, gx;
    scanf("%d%d%d%d%d%d", &r, &c, &sy, &sx, &gy, &gx);
    for (int i = 0; i < r; i++) scanf("%s", mp + i);
    for (int i = 0; i < r; i++) for (int j = 0; j < c; j++) ret[i][j] = -1;
    ret[sy-1][sx-1] = 0;
    que = new(sx, sy);
    last = que;
    while (que != NULL) {
        int x, y;
        pop(&x, &y);
        for (int i = 0; i < 4; i++) {
            int nx = x + dir[i][0], ny = y + dir[i][1];
            if (nx > 0 && nx <= c && ny > 0 && ny <= r && mp[ny-1][nx-1] == '.' && ret[ny-1][nx-1] == -1) {
                ret[ny-1][nx-1] = ret[y-1][x-1] + 1;
                push(nx, ny);
            }
        }
    }
    printf("%d\n", ret[gy-1][gx-1]);
    return 0;
}

Submission Info

Submission Time
Task C - 幅優先探索
User touyou
Language C (GCC 5.4.1)
Score 100
Code Size 1580 Byte
Status AC
Exec Time 2 ms
Memory 128 KB

Compile Error

./Main.c: In function ‘main’:
./Main.c:48:39: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[64]’ [-Wformat=]
     for (int i = 0; i < r; i++) scanf("%s", mp + i);
                                       ^
./Main.c:47:5: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d%d%d%d%d", &r, &c, &sy, &sx, &gy, &gx);
     ^
./Main.c:48:33: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
     for (int i = 0; i < r; i++) scanf("%s", mp + i);
                                 ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status
AC × 3
AC × 25
Set Name Test Cases
Sample subtask0_sample01.txt, subtask0_sample02.txt, subtask0_sample03.txt
All subtask0_sample01.txt, subtask0_sample02.txt, subtask0_sample03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt, subtask1_19.txt, subtask1_20.txt, subtask1_21.txt, subtask1_22.txt
Case Name Status Exec Time Memory
subtask0_sample01.txt AC 1 ms 128 KB
subtask0_sample02.txt AC 1 ms 128 KB
subtask0_sample03.txt AC 1 ms 128 KB
subtask1_01.txt AC 1 ms 128 KB
subtask1_02.txt AC 1 ms 128 KB
subtask1_03.txt AC 1 ms 128 KB
subtask1_04.txt AC 1 ms 128 KB
subtask1_05.txt AC 1 ms 128 KB
subtask1_06.txt AC 1 ms 128 KB
subtask1_07.txt AC 2 ms 128 KB
subtask1_08.txt AC 1 ms 128 KB
subtask1_09.txt AC 1 ms 128 KB
subtask1_10.txt AC 1 ms 128 KB
subtask1_11.txt AC 1 ms 128 KB
subtask1_12.txt AC 1 ms 128 KB
subtask1_13.txt AC 1 ms 128 KB
subtask1_14.txt AC 1 ms 128 KB
subtask1_15.txt AC 1 ms 128 KB
subtask1_16.txt AC 1 ms 128 KB
subtask1_17.txt AC 1 ms 128 KB
subtask1_18.txt AC 1 ms 128 KB
subtask1_19.txt AC 1 ms 128 KB
subtask1_20.txt AC 1 ms 128 KB
subtask1_21.txt AC 1 ms 128 KB
subtask1_22.txt AC 1 ms 128 KB