ParanoidPanda

Untitled

Jan 9th, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 KB | None | 0 0
  1. #include "header.h"
  2.  
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <stdio.h>
  6.  
  7. void loadfrom(){
  8. int i,j;
  9. FILE *file;
  10. countofver = 0;
  11. step = 0;
  12. buf_b = 0;
  13. buf_e = 0;
  14. countrow = 0;
  15. file = fopen("graph.txt", "r");
  16. if (file == NULL){
  17. printf("Cannot open this file \n");
  18. exit(0);
  19. }
  20. else{
  21. //смотрим кол-во строк| кол-во строк = кол-во вершин
  22. char s[1024];
  23. fseek(file, 0, SEEK_SET);
  24. while (!feof(file)){
  25. fgets(s, 1024, file);
  26. if (parse_string(s)) {
  27. if (buf_b + 1 > countofver)
  28. countofver = buf_b + 1;
  29. if (buf_e + 1 > countofver)
  30. countofver = buf_e + 1;
  31. }
  32. }
  33. result = (int*)malloc(countofver* (sizeof(int)));
  34. visited = (int*)malloc(countofver * sizeof(int));
  35. graph = (int **)malloc(countofver * sizeof(int *));
  36. for (i = 0; i < countofver; i++)
  37. graph[i] = (int *)malloc(countofver * sizeof(int));
  38. fseek(file, 0, SEEK_SET);
  39. for (i = 0; i < countofver; i++){
  40. for (j = 0; j < countofver; j++){
  41. graph[i][j] = 0;
  42. }
  43. }
  44. while (!feof(file)){
  45. fgets(s, 1024, file);
  46. if (parse_string(s)) {
  47. graph[buf_b][buf_e] = 1;
  48. }
  49. }
  50. for (i = 0; i < countofver; i++){
  51. for (j = 0; j < countofver; j++){
  52. printf("%d ", graph[i][j]);
  53. }
  54. printf("\n");
  55. }
  56. fclose(file);
  57. }
  58. }
  59.  
  60. void mainalgo(){
  61. int i,j;
  62. for ( i = 0; i < countofver; i++)
  63. visited[i] = 0;
  64. for ( i = 0; i < countofver; i++){
  65. if (!visited[i]){
  66. deepfind(i);
  67. }
  68. }
  69. //переворачиваем массив
  70. for ( i = 0, j = countofver - 1; i < j; i++, j--){
  71. int tmp = result[i];
  72. result[i] = result[j];
  73. result[j] = tmp;
  74. }
  75. for ( i = 0; i < countofver; i++)
  76. printf("%d ", result[i]);
  77. }
  78.  
  79. void deepfind(int ver){
  80. int i;
  81. visited[ver] = 1;
  82. for (i = 0; i < countofver; i++){
  83. if (graph[ver][i] && !visited[i]){
  84. deepfind(i);
  85. }
  86. }
  87. result[step] = ver;
  88. step++;
  89. }
  90.  
  91. void saveto(){
  92. FILE *file = fopen("graphviz.txt", "w+");
  93. int i,j;
  94. int **buff;
  95. //пересобираем матрицу :
  96. printf("\n");
  97. buff = (int **)malloc(countofver * sizeof(int *));
  98. for (i = 0; i < countofver; i++)
  99. buff[i] = (int *)malloc(countofver * sizeof(int));
  100.  
  101. for ( i = 0; i < countofver; i++){
  102. for ( j = 0; j < countofver; j++){
  103. buff[result[i]][j] = graph[i][j];
  104. graph[i][j] = buff[result[i]][j];
  105. }
  106. }
  107.  
  108. for ( i = 0; i < countofver; i++){
  109. for ( j = 0; j < countofver; j++){
  110. graph[j][result[i]] = buff[j][i];
  111. }
  112. }
  113.  
  114. fprintf(file, "digraph {\n");
  115. for ( i = 0; i < countofver; i++){
  116. for ( j = 0; j < countofver; j++){
  117. if (graph[i][j])
  118. fprintf(file, " %d -> %d;\n", i + 1, j + 1);
  119. }
  120. }
  121. fprintf(file, "}");
  122. free(visited);
  123. free(graph);
  124. free(result);
  125. }
  126.  
  127. int parse_string(char *s) {
  128. int j,i,snd_begin;
  129. char *buffer;
  130. i=0;
  131. while (s[i] >= '0' && s[i] <= '9')
  132. ++i;
  133. if (i == 0 || s[i] == '\0')
  134. return 0;
  135. buffer = (char*)malloc(i + 1);
  136. for (j = 0; j < i; j++)
  137. buffer[j] = s[j];
  138. buffer[i] = '\0';
  139. buf_b = atoi(buffer);
  140. free(buffer);
  141.  
  142. while ((s[i] < '0' || s[i] > '9') && s[i] != '\0')
  143. ++i;
  144. if (s[i] == '\0')
  145. return 0;
  146. snd_begin = i;
  147. while (s[i] >= '0' && s[i] <= '9')
  148. ++i;
  149. if (s[i] == '\0')
  150. return 0;
  151. buffer = (char*)malloc(i - snd_begin + 1);
  152. for (j = snd_begin; j < i; j++)
  153. buffer[j - snd_begin] = s[j];
  154. buffer[i - snd_begin] = '\0';
  155. buf_e = atoi(buffer);
  156. free(buffer);
  157. return 1;
  158. }
Advertisement
Add Comment
Please, Sign In to add comment