Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
1,464
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.76 KB | None | 0 0
  1. #include "airport_manager.h"
  2.  
  3.  
  4. void InitializeAirline(Airline *airline, int maxAirportsN){
  5. airline -> airports = (Airport**) calloc(maxAirportsN, sizeof(Airport*));
  6. airline -> numAirports = 0;
  7. airline -> maxAirports = maxAirportsN;
  8.  
  9. }
  10.  
  11. int AddAirport(Airline *airline, const char* name)
  12. {
  13.  
  14. Airport* tptr = FindAirport(airline, name);
  15.  
  16. if( tptr == NULL)
  17. {
  18. Airport* new_port = (Airport *)malloc(sizeof(Airport));
  19. new_port-> name = malloc(sizeof(char) * (strlen(name) + 1));
  20. new_port -> numDestinations = 0;
  21. new_port -> destinations = malloc(sizeof(Airport*));
  22.  
  23. strcpy(new_port -> name , name);
  24.  
  25. if(airline -> maxAirports <= airline -> numAirports)
  26. {
  27. airline -> maxAirports *= 2;
  28. airline -> airports = realloc( airline -> airports, sizeof(Airport*) * (airline -> maxAirports));
  29. }
  30. airline -> airports[airline-> numAirports] = new_port;
  31. airline -> numAirports++;
  32.  
  33. return 1;
  34. }
  35.  
  36. return 0;
  37.  
  38. }
  39.  
  40.  
  41.  
  42. Airport *FindAirport(Airline *airline, const char *name){
  43.  
  44. for( int i = 0; i < airline -> numAirports; i++ ){
  45. Airport* ptr = airline -> airports[i];
  46. if(strcmp(ptr -> name, name) == 0) {
  47. return ptr;
  48. }
  49. }
  50.  
  51.  
  52. return NULL;
  53.  
  54. }
  55.  
  56.  
  57.  
  58.  
  59.  
  60. int AddFlight(Airline *airline, const char* origin_name, const char* dest_name){
  61.  
  62. Airport * origin = FindAirport(airline, origin_name);
  63. Airport * dest = FindAirport(airline, dest_name);
  64.  
  65. if( origin == NULL || dest == NULL){
  66. return 0;
  67. }
  68. else if( strcmp( origin_name, dest_name) == 0){
  69. return 0;
  70. }
  71. else{
  72. for (int i = 0; i < origin -> numDestinations; i++){
  73. if(strcmp(origin_name, origin -> destinations[i] -> name) == 0){
  74.  
  75. return 0;
  76. }
  77. }
  78. origin -> numDestinations++;
  79. origin -> destinations = realloc( origin -> destinations, (origin -> numDestinations)* (sizeof(Airport*) ));
  80.  
  81. // origin -> destinations[origin->numDestinations] = (Airport *) malloc(sizeof(Airport));
  82. // origin -> destinations[origin->numDestinations]->name = malloc(sizeof(char) * (strlen(dest_name) + 1));
  83. // strcpy(origin -> destinations[origin -> numDestinations] -> name , dest_name);
  84.  
  85. origin -> destinations[(origin -> numDestinations) -1] = dest;
  86.  
  87.  
  88. return 1;
  89. }
  90.  
  91.  
  92.  
  93. return 0;
  94.  
  95. } // Part 4
  96.  
  97.  
  98.  
  99.  
  100.  
  101. int PrintFlightsFromAirport(Airline *airline, const char *origin_name){
  102.  
  103. Airport * origin = FindAirport(airline, origin_name);
  104.  
  105. if(origin == NULL){
  106. return 0;
  107. }
  108. else {
  109. for(int i = 0; i < origin -> numDestinations; i++){
  110. printf("%s\n", origin -> destinations[i] -> name);
  111. }
  112. }
  113.  
  114. return 1;
  115.  
  116. } // Part 5
  117.  
  118.  
  119.  
  120.  
  121. int PrintFlightsToAirport(Airline *airline, const char *dest_name){
  122. Airport * dest = FindAirport(airline, dest_name);
  123.  
  124. if(dest == NULL){
  125. return 0;
  126. }
  127. else {
  128.  
  129. for(int i = 0; i < airline -> numAirports; i++){
  130. Airport * ptr = airline -> airports[i];
  131.  
  132. for(int j = 0; j < ptr -> numDestinations; j++ ){
  133. Airport * tptr = ptr -> destinations[j];
  134.  
  135. if(strcmp(tptr -> name, dest_name) == 0){
  136. printf("%s\n", ptr -> name);
  137.  
  138. }
  139. }
  140.  
  141. }
  142. }
  143. return 1;
  144.  
  145. } // Part 6
  146. void PrintAirlineAsMatrix(Airline *airline){
  147.  
  148. for(int i = 0; i < airline -> numAirports; i++){
  149. Airport* ptr = airline -> airports[i];
  150.  
  151. for(int k = 0; k < airline -> numAirports; k++){
  152.  
  153. Airport * temp = airline -> airports[k];
  154.  
  155. if(i == k){
  156. printf("0");
  157. continue;
  158. }
  159. else if(HasDirectFlight(airline, ptr -> name , temp-> name )){
  160. printf("1");
  161. }
  162. else{
  163. printf("0");
  164. }
  165.  
  166. }
  167. printf("\n");
  168.  
  169. }
  170.  
  171.  
  172.  
  173.  
  174.  
  175. }
  176.  
  177.  
  178.  
  179. int HasDirectFlight(Airline *airline, const char *origin_name, const char *dest_name){
  180.  
  181. Airport * origin = FindAirport(airline, origin_name);
  182. Airport * dest = FindAirport(airline, dest_name);
  183.  
  184. if( origin == NULL || dest == NULL){
  185. return 0;
  186. }
  187. else if(strcmp(origin_name, dest_name) == 0){
  188. return 0;
  189. }
  190. else{
  191. for (int i = 0; i < origin -> numDestinations; i++){
  192. if(strcmp(dest_name, origin -> destinations[i] -> name) == 0){
  193. return 1;
  194. }
  195.  
  196. }
  197. return 0;
  198.  
  199. }
  200.  
  201. } // Part 8
  202.  
  203.  
  204. int HasOneStopFlight(Airline *airline, const char *origin_name, const char *dest_name)
  205. {
  206.  
  207. Airport * origin = FindAirport(airline, origin_name);
  208. Airport * dest = FindAirport(airline, dest_name);
  209. Airport * first;
  210.  
  211. if( origin == NULL || dest == NULL){
  212. return 0;
  213. }
  214. else if(strcmp(origin_name, dest_name) == 0){
  215. return 0;
  216. }
  217. else if(HasDirectFlight(airline, origin_name , dest_name) == 1){
  218. return 0;
  219. }
  220. else{
  221. for (int i = 0; i < origin -> numDestinations; i++){
  222. first = origin -> destinations[i];
  223. if(HasDirectFlight(airline, first -> name, dest_name) == 1){
  224. return 1;
  225. }
  226.  
  227. }
  228.  
  229. }
  230.  
  231. return 0;
  232.  
  233. } // Part 9
  234.  
  235.  
  236.  
  237. void DeleteAirline(Airline *airline){
  238.  
  239. for(int i =0; i < airline -> numAirports; i++){
  240. free(airline -> airports[i]-> destinations);
  241. free(airline -> airports[i]-> name);
  242. free(airline -> airports[i]);
  243. airline -> airports[i] = NULL;
  244. }
  245. free(airline -> airports);
  246.  
  247. } // Part 10
  248.  
  249.  
  250.  
  251.  
  252. void GuaranteeOneStop(Airline *airline){
  253. Airport * origin;
  254. Airport * dest;
  255.  
  256. if(airline == NULL){
  257. return;
  258. }
  259.  
  260. for(int i = 0; i < airline -> numAirports; i++){
  261. origin = airline -> airports[i];
  262.  
  263. for(int j = 0; j < airline -> numAirports; j++ ){
  264. dest = airline -> airports[j];
  265. if(HasDirectFlight(airline, origin -> name, dest -> name) == 1 || HasOneStopFlight(airline, origin -> name, dest -> name) == 1){
  266. continue;
  267. }
  268. else{
  269. AddFlight(airline,origin -> name, dest -> name );
  270.  
  271. }
  272.  
  273. }
  274.  
  275.  
  276. }
  277.  
  278.  
  279.  
  280. } // Part 11 extra credit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement