2016-12-29 14 views
0

Я новичок в программировании, и я пытаюсь решить 929-номер Maze на судье UVA-онлайн, и я написал этот код, и он отлично работает в блоках кода, но когда я отправляю этот код на uva-online судья, он показывает Runtime error и я просто не могу понять, что я делаю неправильно.Как я могу определить, что не так с моим кодом, когда вывод правильный?

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

int min(int x, int y); 

int minCost(int **cost, int m, int n) { 
    int i, j; 
    int tc[m][n]; 

    tc[0][0] = cost[0][0]; 

    for (i = 1; i < m; i++) { 
     tc[i][0] = tc[i - 1][0] + cost[i][0]; 
    } 
    for (j = 1; j < n; j++) { 
     tc[0][j] = tc[0][j - 1] + cost[0][j]; 
    } 
    for (i = 1; i < m; i++) { 
     for (j = 1; j < n; j++) { 
      tc[i][j] = min(tc[i - 1][j], tc[i][j - 1]) + cost[i][j]; 
     } 
    } 
    return tc[m - 1][n - 1]; 
} 

int min(int x, int y) { 
    if (x < y) 
     return x; 
    else 
     return y; 
} 

int main() { 
    int t, a, b, M, N, k; 
    scanf("%d", &t); 
    while (t--) { 
     scanf("%d", &M); 
     scanf("%d", &N); 
     int **c = (int **)malloc(sizeof(int*) * M); 
     for (k = 0; k < N; k++) 
      *(c + k) = (int *)malloc(sizeof(int) * M); 

     for (a = 0; a < M; a++) { 
      for (b = 0; b < N; b++) { 
       scanf("%d", &c[a][b]); 
      } 
     } 
     int res = minCost(c, M, N); 
     printf("%d", res); 
    } 
    return 0; 
} 

вход:

2 
4 
5 
0 3 1 2 9 
7 3 4 9 9 
1 7 5 5 3 
2 3 4 2 5 
1 
6 
0 1 2 3 4 5 

выход:

24 
15 
+0

показать нам параметры проблемы – coderredoc

+0

'for (k = 0; k 'for (k = 0; k BLUEPIXY

+0

' int tc [m] [n]; 'может быть большим на стек. – BLUEPIXY

ответ

1

Одна из проблем в

*(c+k) = (int*)malloc(sizeof(int)*M); 

Это должно быть

*(c+k) = malloc(sizeof(int)*N); //N instead of M 
+0

спасибо, что больше не ошибка времени выполнения, но на этот раз говорит неверный ответ. и этот код отлично работает в кодовых блоках и идеонах. он передает данные тестовые примеры. – Mank99999

+1

@ Mank99999: ваш вывод из вашего кода находится в одной строке без пробелов между ответами, но он должен быть на нескольких строках, по одному ответу на строку. –

+0

@ Mank99999: в этом цикле инициализации есть еще одна ошибка. См. Мой ответ. – chqrlie

0

Добро пожаловать в удивительный мир программирования.

Тщательный анализ кода показывает эту ошибку:

Цикл инициализации неверен как в тесте петли и malloc аргумента, следует читать:

for (k = 0; k < M; k++) { 
     c[k] = malloc(sizeof(int) * N); 
    } 

Как писал, ваша программа вызывает неопределенное поведение , Он может давать ожидаемые результаты случайно (как это наблюдается в вашей системе), но также может вызывать ошибку времени выполнения при доступе к массивам за пределами выделенного размера (как это наблюдается на веб-сайте судьи uva-online).