Submission #1961863
Source Code Expand
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#define rep(n, i) for(int i = 0; i < n; i++)
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define MIN(a, b) ((a) < (b) ? (a) : (b))
void find_way(char** map, int** way, int nx, int ny, int gx, int gy, int R, int C){
if (nx == gx && ny == gy) return way[gy][gx];
if (nx+1 <= C-1) {
if (map[ny][nx+1] != '#'){
if (way[ny][nx+1] < 0 || way[ny][nx+1] > way[ny][nx] + 1) {
way[ny][nx+1] = way[ny][nx] + 1;
find_way(map, way, nx+1, ny, gx, gy, R, C);
}
}
}
if (ny+1 <= R-1) {
if (map[ny+1][nx] != '#'){
if (way[ny+1][nx] < 0 || way[ny+1][nx] > way[ny][nx] + 1) {
way[ny+1][nx] = way[ny][nx] + 1;
find_way(map, way, nx, ny+1, gx, gy, R, C);
}
}
}
if (nx-1 >= 0) {
if (map[ny][nx-1] != '#'){
if (way[ny][nx-1] < 0 || way[ny][nx-1] > way[ny][nx] + 1) {
way[ny][nx-1] = way[ny][nx] + 1;
find_way(map, way, nx-1, ny, gx, gy, R, C);
}
}
}
if (ny-1 >= 0) {
if (map[ny-1][nx] != '#'){
if (way[ny-1][nx] < 0 || way[ny-1][nx] > way[ny][nx] + 1) {
way[ny-1][nx] = way[ny][nx] + 1;
find_way(map, way, nx, ny-1, gx, gy, R, C);
}
}
}
}
void solve(void){
int R, C, sy, sx, gy, gx;
scanf("%d %d\n", &R, &C);
scanf("%d %d\n", &sy, &sx);
scanf("%d %d\n", &gy, &gx);
char **map = (char **)malloc(sizeof(char *) * R);
rep(R, i){
map[i] = (char *)malloc(sizeof(char) * (C+1));
scanf("%s", map[i]);
}
int** way = (int **)malloc(sizeof(int *) * R);
rep(R, i) {
way[i] = (int *)malloc(sizeof(int) * C);
rep(C, j) way[i][j] = -1;
}
way[sy-1][sx-1] = 0;
find_way(map, way, sx-1, sy-1, gx-1, gy-1, R, C);
printf("%d\n", way[gy-1][gx-1]);
}
int main(void){
solve();
return 0;
}
Submission Info
Submission Time
2018-01-11 02:37:03+0900
Task
C - 幅優先探索
User
sifi_border
Language
C (GCC 5.4.1)
Score
100
Code Size
2084 Byte
Status
AC
Exec Time
10 ms
Memory
512 KB
Compile Error
./Main.c: In function ‘find_way’:
./Main.c:10:38: warning: ‘return’ with a value, in function returning void
if (nx == gx && ny == gy) return way[gy][gx];
^
./Main.c: In function ‘solve’:
./Main.c:48:5: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d\n", &R, &C);
^
./Main.c:49:5: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d\n", &sy, &sx);
^
./Main.c:50:5: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d\n", &gy, &gx);
^
./Main.c:54:9: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%s", map[i]);
^
Judge Result
Set Name
Sample
All
Score / Max Score
0 / 0
100 / 100
Status
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
10 ms
512 KB
subtask1_01.txt
AC
1 ms
256 KB
subtask1_02.txt
AC
1 ms
256 KB
subtask1_03.txt
AC
1 ms
128 KB
subtask1_04.txt
AC
10 ms
512 KB
subtask1_05.txt
AC
9 ms
512 KB
subtask1_06.txt
AC
2 ms
256 KB
subtask1_07.txt
AC
1 ms
128 KB
subtask1_08.txt
AC
1 ms
128 KB
subtask1_09.txt
AC
1 ms
256 KB
subtask1_10.txt
AC
1 ms
256 KB
subtask1_11.txt
AC
10 ms
512 KB
subtask1_12.txt
AC
9 ms
512 KB
subtask1_13.txt
AC
1 ms
256 KB
subtask1_14.txt
AC
1 ms
128 KB
subtask1_15.txt
AC
2 ms
256 KB
subtask1_16.txt
AC
3 ms
256 KB
subtask1_17.txt
AC
7 ms
384 KB
subtask1_18.txt
AC
6 ms
256 KB
subtask1_19.txt
AC
1 ms
256 KB
subtask1_20.txt
AC
1 ms
256 KB
subtask1_21.txt
AC
2 ms
256 KB
subtask1_22.txt
AC
1 ms
256 KB