#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <errno.h> #include "functions.h" int stack_size = 0; /* stack full size */ int main() { int *A; /* Stack - massive pointer */ int N = -1; /* stack top pointer */ int opt; /* switch options */ int ext_data, add_data; /* extracting and adding data */ printf("Please, enter stack size : "); scanf("%d", &stack_size); A = create_stack(stack_size); printf("\n"); while(1) { interface(); opt = getchar(); switch(opt) { case 'e': ext_data = stack_pop(A,&N); break; case 'a': printf("Enter adding data:\n"); scanf("%d", &add_data); stack_push(A, &N, add_data); break; case 'd': N = delete_stack(A); break; case 'f': printf("Free place in stack: %d\n", free_place(N, stack_size)); break; case 'q': if(N != -2) printf("Please, make free stack\n"); else exit(1); break; } } return 0; }
/** * @brief * free_resource_resv - free a resource resv strcture an all of it's ptrs * * @param[in] resresv - resource_resv to free * * @return nothing * */ void free_resource_resv(resource_resv *resresv) { if (resresv == NULL) return; if (resresv->name != NULL) free(resresv->name); if (resresv->user != NULL) free(resresv->user); if (resresv->group != NULL) free(resresv->group); if (resresv->project != NULL) free(resresv->project); if (resresv->nodepart_name != NULL) free(resresv->nodepart_name); if (resresv->select != NULL) free_selspec(resresv->select); if (resresv->execselect != NULL) free_selspec(resresv->execselect); if (resresv->place_spec != NULL) free_place(resresv->place_spec); if (resresv->resreq != NULL) free_resource_req_list(resresv->resreq); if (resresv->ninfo_arr != NULL) free(resresv->ninfo_arr); if (resresv->nspec_arr != NULL) free_nspecs(resresv->nspec_arr); if (resresv->job != NULL) free_job_info(resresv->job); if (resresv->resv != NULL) free_resv_info(resresv->resv); if (resresv->aoename != NULL) free(resresv->aoename); if (resresv->eoename != NULL) free(resresv->eoename); if (resresv->node_set_str != NULL) free_string_array(resresv->node_set_str); if (resresv->node_set != NULL) free(resresv->node_set); free(resresv); }
Coord small_path_search(Coord c1, Coord c2) { int steps = 10; auto dist = [](Coord c, Coord cc) { return abs(c.x - cc.x) + abs(c.y - cc.y); }; std::vector<Coord> stack; std::map<Coord, int> visited; stack.push_back(c1); std::vector<Coord> childs; while(steps-- && stack.size()) { childs.clear(); Coord c = stack.back(); stack.pop_back(); if (c == c2) { break; } visited[c] = steps; Coord cc = c.move(Direction::Left); if (free_place(cc) && visited.find(cc) == visited.end()) { childs.push_back(cc); } cc = c.move(Direction::Right); if (free_place(cc) && visited.find(cc) == visited.end()) { childs.push_back(cc); } cc = c.move(Direction::Up); if (free_place(cc) && visited.find(cc) == visited.end()) { childs.push_back(cc); } cc = c.move(Direction::Down); if (free_place(cc) && visited.find(cc) == visited.end()) { childs.push_back(cc); } std::sort(childs.begin(), childs.end(), [&](Coord c, Coord cc) { return dist(c2, c) > dist(c2, cc); }); for (auto ch : childs) { stack.push_back(ch); } } std::pair<Coord, int> min = std::make_pair(c1, 100); for(auto v : visited) { if (!(v.first == c1) && can_atack(v.first, c1) && min.second > v.second) { min = v; } } return min.first; }