Advertisement
Guest User

Untitled

a guest
Apr 27th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.17 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <string.h>
  5.  
  6. typedef struct{
  7. int x, y;
  8. char name[20];
  9. } location;
  10.  
  11. int coord_x(int x1, int y1, int r1, int x2, int y2, int r2, int x3, int y3, int r3)
  12. {
  13. int x;
  14. x = ((y2-y3)*(y2*y2-y1*y1+x2*x2-x1*x1+r1*r1-r2*r2)-(y1-y2)*(y3*y3-y2*y2+x3*x3-x2*x2+r2*r2-r3*r3))/(2*((x2-x1)*(y2-y3)-(x3-x2)*(y1-y2)));
  15. return x;
  16. }
  17. int coord_y(int x1, int y1, int r1, int x2, int y2, int r2, int x3, int y3, int r3)
  18. {
  19. int y;
  20. y = ((x2-x3)*(x2*x2-x1*x1+y2*y2-y1*y1+r1*r1-r2*r2)-(x1-x2)*(x3*x3-x2*x2+y3*y3-y2*y2+r2*r2-r3*r3))/(2*((y2-y1)*(x2-x3)-(y3-y2)*(x1-x2)));
  21. return y;
  22. }
  23.  
  24. int distance(location n1, location n2)
  25. {
  26. return sqrt((n1.x - n2.x) * (n1.x - n2.x) + (n1.y - n2.y) * (n1.y - n2.y));
  27. }
  28.  
  29. void rf(int ***a, int n)
  30. {
  31. int i, j, k;
  32. for (k=1; k<=n; k++)
  33. for (i=1; i<=n; i++)
  34. for (j=1; j<=n; j++)
  35. {
  36. if ((*a)[i][j] > (*a)[i][k]+(*a)[k][j] && (*a)[i][j]!=-1 && (*a)[i][k]!=-1 && (*a)[k][j]!=-1)
  37. {
  38. (*a)[i][j] = (*a)[i][k]+(*a)[k][j];
  39. }
  40. }
  41. }
  42.  
  43. void read (int ***a, int *n, location **p, char *fisier1in, char *fisier2in)
  44. {
  45. FILE *coord, *avarii;
  46. char useless_buffer[20], buf1[20], buf2[20];
  47. int x1, y1, r2, x2, y2, r1, x3, y3, r3;
  48.  
  49. coord = fopen(fisier1in,"r");
  50. fscanf(coord, "%d", n);
  51.  
  52. int j=1, i;
  53. int n1, n2;
  54.  
  55. *p = (location*)calloc((*n)+1, sizeof(location));
  56. *a = (int**)calloc((*n)+1, sizeof(int));
  57. for (i=0; i<=(*n)+1; i++)
  58. {
  59. (*a)[i] = (int*)calloc((*n)+1, sizeof(int));
  60. }
  61.  
  62. for (i=1; i<= *n; i++)
  63. {
  64. fscanf(coord, "%s", (*p)[i].name);
  65. fscanf(coord, "%s %d %d %d", useless_buffer, &x1, &y1, &r1);
  66. fscanf(coord, "%s %d %d %d", useless_buffer, &x2, &y2, &r2);
  67. fscanf(coord, "%s %d %d %d", useless_buffer, &x3, &y3, &r3);
  68. (*p)[i].x = coord_x( x1, y1, r1, x2, y2, r2, x3, y3, r3);
  69. (*p)[i].y = coord_y( x1, y1, r1, x2, y2, r2, x3, y3, r3);
  70. }
  71. for (i=1; i<= *n; i++)
  72. {
  73. for (j=1; j<= *n; j++)
  74. {
  75. (*a)[i][j] = distance((*p)[i], (*p)[j]);
  76. }
  77. }
  78. avarii = fopen(fisier2in, "r");
  79. while(fscanf(avarii, "%s %s", buf1, buf2)!=EOF)
  80. {
  81. for (i=1; i<= *n; i++)
  82. {
  83. if (!strcmp(buf1, (*p)[i].name))
  84. {
  85. n1 = i;
  86. }
  87. if (!strcmp(buf2, (*p)[i].name))
  88. {
  89. n2 = i;
  90. }
  91. }
  92. (*a)[n1][n2] = -1;
  93. }
  94.  
  95. }
  96. void write(location *p, int x, int n, char *fiser1out, char *fisier2out)
  97. {
  98. FILE *coord, *rez;
  99. coord = fopen(fiser1out, "w");
  100. rez = fopen(fisier2out, "w");
  101. int i;
  102. for (i=1; i<=n; i++)
  103. {
  104. fprintf(coord, "%d %d\n", p[i].x, p[i].y);
  105. }
  106. fprintf(rez, "%d", x);
  107.  
  108. fclose(coord);
  109. fclose(rez);
  110. }
  111.  
  112. int main(int argc, char *argv[])
  113. {
  114. char fisier1in[20], fisier2in[20], dest[20], fisier1out[20], fisier2out[20];
  115. strcpy(fisier1in, argv[0]);
  116. strcpy(fisier2in, argv[1]);
  117. strcpy(dest, argv[2]);
  118. strcpy(fisier1out, argv[3]);
  119. strcpy(fisier2out, argv[4]);
  120.  
  121. int **a, n, x, i;
  122. location *p;
  123. read(&a, &n, &p, fisier1in, fisier2in);
  124. rf(&a, n);
  125.  
  126. for (i=1; i<= n; i++)
  127. {
  128. if (!strcmp(dest, p[i].name))
  129. {
  130. x = a[1][i];
  131. }
  132. }
  133.  
  134. write(p, x, n, fisier1out, fisier2out);
  135.  
  136. return 0;
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement