Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.43 KB | None | 0 0
  1. /*-------------------------------------------------------------------------
  2. Include files:
  3. --------------------------------------------------------------------------*/
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include<stdbool.h>
  8. /*=========================================================================
  9. Constants and definitions:
  10. ==========================================================================*/
  11.  
  12. /* put your #defines and typedefs here*/
  13. #define N 4
  14.  
  15.  
  16. /*-------------------------------------------------------------------------
  17. The main program. (describe what your program does here)
  18. -------------------------------------------------------------------------*/
  19. //void fillbeenthere(int beenthere[N][N],int start);
  20. void PrintWelcomeMessage();
  21. void PrintSourceCityMessage();
  22. void PrintDestinationCityMessage();
  23. void input_function(int matrix[N][N]);
  24. int pathfinder(int matrix[N][N],int i, int sum,int beenthere[N],int *fullsum,int end,int path[9],int counter);
  25.  
  26.  
  27. int main()
  28. {
  29. int matrix[N][N] = {0};
  30. int beenthere[N] = {0};
  31. int path[9] = {-1,-1,-1,-1,-1,-1,-1,-1,-1};
  32. int start = 0, end = 0,finalsum = 0, *fullsum = &finalsum, sum = 0 ,k = 0,counter = 0;
  33. PrintWelcomeMessage();
  34. input_function(matrix);
  35. PrintSourceCityMessage();
  36. scanf(" %d",&start);
  37. PrintDestinationCityMessage();
  38. scanf(" %d",&end);
  39. //fillbeenthere(beenthere,start);
  40. finalsum = matrix[start][end];
  41. path[0] = start;
  42. beenthere[start] = 1;
  43. counter = pathfinder(matrix,start,sum,beenthere,fullsum,end,path,counter);
  44. for (int q = 0; q <= 8;q++)
  45. {
  46. printf("%d ",path[q]);
  47. }
  48. return 0;
  49. }
  50. void PrintWelcomeMessage()
  51. {
  52. printf("Please enter road matrix:\n");
  53. }
  54.  
  55. void PrintSourceCityMessage()
  56. {
  57. printf("Please enter source city:\n");
  58. }
  59.  
  60. void PrintDestinationCityMessage()
  61. {
  62. printf("Please enter destination city:\n");
  63. }
  64.  
  65. void input_function(int matrix[N][N])
  66. {
  67. char temp = 0;
  68. for(int i = 0; i < N; i++)
  69. {
  70. for(int j = 0; j < N; j++)
  71. {
  72. scanf(" %c",&temp);
  73. if (temp != '\n')
  74. {
  75. matrix[i][j]=(int)temp-48;
  76. }
  77. }
  78. }
  79. }
  80. int pathfinder(int matrix[N][N],int i, int sum,int beenthere[N],int *fullsum,int end,int path[9],int counter)
  81. {
  82. int kickback = 0;
  83. int temp = 0;
  84. printf("Starting pathfinder with counter=%d, sum=%d, fullsum = %d, counter = %d\n", i, sum, *fullsum, counter);
  85. //printf(" counter %d\n",counter);
  86. for(int j = 0; j < N; j++)
  87. {
  88.  
  89. printf("Testing path for city: %d at level %d, path taken thus far [%d, %d, %d, %d] \n", j, counter, path[0], path[1], path[2], path[3]);
  90.  
  91. if(beenthere[j] == 1)
  92. {
  93. printf("Aborted path towards city: %d due to already travelling at this city\n", j);
  94. //printf("been here j %d \n",j);
  95. continue;
  96. }
  97. if(sum + matrix[i][j] > *fullsum)
  98. {
  99. printf("Aborted path towards city: %d due to travel length (%d) greater than current minimum (%d) \n", j, sum + matrix[i][j], *fullsum);
  100. //printf("too big \n");
  101. continue;
  102. }
  103. //sum = matrix[i][j] + sum;
  104. beenthere[j] = 1;
  105. //printf("right before end\n");
  106. if(j==end)
  107. {
  108. //printf("in if end \n");
  109. if(matrix[i][j] + sum < *fullsum)
  110. {
  111. printf("Overriding the best-sum thus far (%d) with %d\n",*fullsum, matrix[i][j] + sum);
  112. *fullsum = matrix[i][j] + sum;
  113. path[counter+1] = j;
  114. return counter+1;
  115. }
  116. }
  117.  
  118. //printf("out if bad \n");
  119. //beenthere[i][j] = 1;
  120. temp = pathfinder(matrix,j,matrix[i][j] + sum,beenthere,fullsum,end,path,counter+1);
  121. beenthere[j] = 0;
  122. if(temp >= 0)
  123. {
  124. path[counter] = i;
  125. //return counter;
  126. kickback = temp;
  127. }
  128. else
  129. {
  130. kickback = kickback >=0 ? kickback : -1;
  131. printf("kick back %d \n",kickback);
  132. }
  133. }
  134. return kickback;
  135. }
  136. /*void fillbeenthere(int beenthere[N][N],int start)
  137. {
  138. for (int i = 0;i < N;i++)
  139. {
  140. for(int j = 0;j < N; j++)
  141. {
  142. if (j == start)
  143. {
  144. beenthere[i][j] = 1;
  145. }
  146.  
  147. }
  148. beenthere[i][i] = 1;
  149. }
  150. }
  151. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement