Advertisement
Guest User

Untitled

a guest
Apr 25th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.45 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5.  
  6. int matriz[10][10];
  7. int cAtual[11], cOriginal[11] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, cMenorCusto[11];
  8. int n = 5, menorCusto;
  9.  
  10. void ler();
  11.  
  12. void imprimir(int vetor[11]);
  13. void imprimirValorSoma(int soma);
  14. void inverter(int inicio, int fim);
  15. void copiar(int vetor1[11], int vetor2[11]);
  16.  
  17. void calcularHeuristica();
  18. int calcularValor(int caminho[11]);
  19. void validaCaminho(int caminho[11]);
  20.  
  21. int main() {
  22. srand(time(NULL));
  23.  
  24. ler();
  25.  
  26. calcularHeuristica();
  27.  
  28. printf("\n\nMenor custo possivel: %d", menorCusto);
  29. imprimir(cMenorCusto);
  30.  
  31. return 0;
  32. }
  33.  
  34. int calcularValor(int caminho[11]) {
  35. int soma = 0, i;
  36.  
  37. for(i = 0; i < n - 1; i++) {
  38. if(matriz[caminho[i]][caminho[i + 1]] != 0) {
  39. soma += matriz[caminho[i]][caminho[i + 1]];
  40. //printf("\nmatriz[%d][%d]: %d", caminho[i], caminho[i+1], matriz[caminho[i]][caminho[i + 1]]);
  41. } else {
  42. soma = 0;
  43. break;
  44. }
  45.  
  46. }
  47.  
  48. if(soma > 0) {
  49. if(matriz[caminho[i]][caminho[0]] != 0) {
  50. soma += matriz[caminho[i]][caminho[0]];
  51. if(soma < menorCusto) {
  52. menorCusto = soma;
  53. copiar(cMenorCusto, caminho);
  54. }
  55. //printf("\nmatriz[%d][%d]: %d", caminho[i], caminho[0], matriz[caminho[i]][caminho[0]]);
  56. } else {
  57. soma = 0;
  58. }
  59. }
  60.  
  61. return soma;
  62.  
  63. }
  64.  
  65. void calcularHeuristica() {
  66. int j, i;
  67. for(j = 2; j < n; j++) {
  68. printf("\n\nFazendo troca entre %d\n", j);
  69.  
  70. for(i = 1; i < n - j + 1; i++) {
  71. inverter(i, i + j - 1);
  72. imprimir(cAtual);
  73. imprimirValorSoma(calcularValor(cAtual));
  74. }
  75. getch();
  76. }
  77. }
  78.  
  79. void imprimirValorSoma(int soma) {
  80. if(soma > 0) {
  81. printf(" = %d", soma);
  82. } else {
  83. printf(" = Alguma aresta eh vazia!");
  84. }
  85. }
  86.  
  87. void inverter(int inicio, int qt) {
  88. int fim = inicio + qt + 1;
  89. int temp;
  90.  
  91. copiar(cAtual, cOriginal);
  92. int contador;
  93. for (contador = inicio; contador < fim/2; ++contador){
  94. temp = cAtual[contador];
  95. cAtual[contador] = cAtual[fim - contador - 1];
  96. cAtual[fim - contador - 1] = temp;
  97. }
  98. }
  99.  
  100. void copiar(int vetor1[11], int vetor2[11]) {
  101. int i;
  102. for(i = 0; i < n; i++) {
  103. vetor1[i] = vetor2[i];
  104. }
  105. }
  106.  
  107. void imprimir(int vetor[11]) {
  108. printf("\n");
  109. int i;
  110. for(i = 0; i < n; i++) {
  111. printf("%d --> ", vetor[i]);
  112. }
  113. printf("%d", vetor[0]);
  114. }
  115.  
  116. void imprimirMatriz() {
  117. int i, j;
  118.  
  119. printf("\n ");
  120.  
  121. for(i = 0; i < n; i++) {
  122. printf("%2d ", i);
  123. }
  124.  
  125. printf("\n-----");
  126.  
  127. for(i = 0; i < n; i++) {
  128. printf("---");
  129. }
  130.  
  131. printf("\n");
  132.  
  133. for(i = 0; i < n; i++) {
  134. printf("%2d | ", i);
  135. for(j = 0; j < n; j++) {
  136. printf("%2d ", matriz[i][j]);
  137. }
  138. printf("\n");
  139. }
  140. }
  141.  
  142. void ler() {
  143. int i, j;
  144.  
  145. n = (rand() % 7) + 3;
  146.  
  147. printf("Numero de nodos = %d\n", n);
  148.  
  149. for(i = 0; i < n; i++) {
  150. for(j = 0; j < n; j++) {
  151. matriz[i][j] = rand() % 10;
  152. }
  153. }
  154.  
  155. for(i = 0; i < n; i++) {
  156. matriz[i][i] = 0;
  157. }
  158.  
  159. imprimirMatriz();
  160.  
  161. do {
  162.  
  163. cOriginal[0] = rand() % n;
  164.  
  165. for(i = 0; i < n; i++) {
  166. int x = rand() % n;
  167.  
  168. for(j = 0; j < i; j++) {
  169. if(cOriginal[j] == x) {
  170. i--;
  171. break;
  172. } else {
  173. cOriginal[i] = x;
  174. }
  175. }
  176. //printf("\ncOriginal[%d] = %d", j, cOriginal[j]);
  177. }
  178. } while(calcularValor(cOriginal) == 0);
  179.  
  180. imprimir(cOriginal);
  181. imprimirValorSoma(calcularValor(cOriginal));
  182.  
  183. copiar(cMenorCusto, cOriginal);
  184. menorCusto = calcularValor(cOriginal);
  185.  
  186. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement