Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // prototipovi stack funkcija
- stack_t stack_new();
- void stack_delete(stack_t stack);
- void stack_push(stack_t stack, stack_element_t elem);
- stack_element_t stack_pop(stack_t stack);
- stack_element_t stack_top(stack_t stack);
- int stack_is_empty(stack_t stack);
- // rekurzivno traži najjeftiniji spust kroz matricu, korisnik daje indeks ćelije od koje se kreće
- void traverseOpti(struct path **matrix, unsigned row, unsigned col, int path_cost, int *min_cost, int *cnt, stack_t answer, FILE *f)
- {
- stack_t temp = NULL;
- char buffer[16];
- path_cost += matrix[row][col].value;
- matrix[row][col].sum = path_cost;
- (*cnt)++; // brojanje poziva
- temp = stack_new();
- fprintf(f, "Broj poziva: %d, min_cost: %s, path_cost: %d, value: %d, sum: %d\n", *cnt, *min_cost == INT_MAX ? "Inf" : itoa(*min_cost, buffer, 10), path_cost, matrix[row][col].value, matrix[row][col].sum); // logiranje
- if(matrix[row][col].sum > *min_cost) // ako smo tu već bili prije s manjim utroškom ni ne idi u tu granu
- {
- stack_delete(temp);
- return;
- }
- if(row == MATRIX_ROW - 1) // ako smo na dnu matrice
- {
- if(path_cost < *min_cost) // ako smo pronašli novu optimalnu putanju
- {
- *min_cost = path_cost;
- stack_delete(answer);
- answer = stack_new();
- while(!stack_is_empty(temp))
- stack_push(answer, stack_pop(temp));
- }
- stack_delete(temp);
- return;
- }
- if (col < MATRIX_COL - 1) // idi dolje desno
- {
- stack_push(temp, matrix[row + 1][col + 1].value);
- traverse(matrix, row + 1, col + 1, path_cost, min_cost, cnt, answer, f);
- stack_pop(temp);
- }
- // idi ravno dolje
- stack_push(temp, matrix[row + 1][col].value);
- traverse(matrix, row + 1, col, path_cost, min_cost, cnt, answer, f);
- stack_pop(temp);
- if (col > 0) // idi dolje lijevo
- {
- stack_push(temp, matrix[row + 1][col - 1].value);
- traverse(matrix, row + 1, col - 1, path_cost, min_cost, cnt, answer, f);
- stack_pop(temp);
- }
- stack_delete(temp);
- }
Advertisement
Add Comment
Please, Sign In to add comment