Advertisement
Guest User

Untitled

a guest
May 27th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.24 KB | None | 0 0
  1. #ifdef _MSC_VER
  2. #define _CRT_SECURE_NO_WARNINGS
  3. #endif
  4.  
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <time.h>
  9. #define MAX 40
  10. #define scanf_s scanf
  11.  
  12. typedef struct egde {
  13. int pointA;
  14. int pointB;
  15. }Edge;
  16.  
  17.  
  18. int nodeID(int columns, int i, int j) {
  19. return i * columns + j;
  20. }
  21.  
  22. void menu() {
  23. printf("1. kreiraj \n");
  24. printf("2. ispis\n");
  25. printf("3. \n");
  26. printf("4. \n");
  27. printf("5. \n");
  28. printf("6. \n");
  29. printf("7. \n");
  30. printf("8. \n");
  31. }
  32.  
  33. Edge **addEdges(Edge **edges, int *numOfEdges, int newNode, int i, int j, int rows, int columns) {
  34. edges = (Edge**)realloc(edges, (*numOfEdges +1) * 4 * sizeof(Edge*));
  35. if (i > 0) {
  36. Edge *up = (Edge*)malloc(sizeof(Edge));
  37. int pointB = nodeID(columns, i - 1, j);
  38. up->pointB = pointB;
  39. up->pointA = newNode;
  40. edges[*numOfEdges] = up;
  41. *numOfEdges+=1;
  42. }
  43. if (j > 0) {
  44. Edge *left = (Edge*)malloc(sizeof(Edge));
  45. int pointB = nodeID(columns, i, j - 1);
  46. left->pointB = pointB;
  47. left->pointA = newNode;
  48. edges[*numOfEdges] = left;
  49. *numOfEdges+=1;
  50. }
  51. if (i < columns - 1) {
  52. Edge *right = (Edge*)malloc(sizeof(Edge));
  53. int pointB = nodeID(columns, i, j + 1);
  54. right->pointB = pointB;
  55. right->pointA = newNode;
  56. edges[*numOfEdges] = right;
  57. *numOfEdges+=1;
  58. }
  59. if (j < rows - 1) {
  60. Edge *down = (Edge*)malloc(sizeof(Edge));
  61. int pointB = nodeID(columns, i + 1, j);
  62. down->pointB = pointB;
  63. down->pointA = newNode;
  64. edges[*numOfEdges] = down;
  65. *numOfEdges+=1;
  66. }
  67. return edges;
  68. }
  69.  
  70. //int edgesEmpty(Edge *edges, int numOfEdges) {
  71. // int flag = 1;
  72. // for (int i = 0; i < numOfEdges * 4; i++)
  73. // {
  74. // Edge *n = malloc(sizeof(Edge));
  75. // *n = edges[i];
  76. // if (n->pointA != -1) {
  77. // flag = 0;
  78. // }
  79. // }
  80. // return flag;
  81. //}
  82.  
  83. void print(int **mat, int rows, int columns) {
  84. for (int i = 0; i < rows; i++) {
  85. for (int j = 0; j < columns; j++)
  86. {
  87. if (mat[i][j] == 1)
  88. printf("#");
  89. else printf(" ");
  90. }
  91. printf("\n");
  92. }
  93. }
  94.  
  95. void input(int **mat, int rows, int columns, int numOfNodes) {
  96.  
  97. //int firstID, secondID;
  98. //vektor grana
  99. Edge **edges = calloc(0,sizeof(Edge*));
  100. //vektor cvorova
  101. int *nodes = (int*)calloc(numOfNodes, sizeof(int));
  102. //random generisi prvi cvor
  103. srand(time(0));
  104. int newNodeI = rand()%rows;//((double)rand() / (RAND_MAX + 1.0)) * rows;
  105. int newNodeJ = rand()%columns;//((double)rand() / (RAND_MAX + 1.0)) * columns;
  106. int newNode = nodeID(columns, newNodeI, newNodeJ);
  107. nodes[newNode] = 1;
  108.  
  109.  
  110. int numOfEdges = 0;
  111. while (1) {
  112.  
  113. int usedNodes = 1;
  114. for (int i = 0; i < numOfNodes; i++) {
  115. if (nodes[i] == 0) {
  116. usedNodes = 0;
  117. break;
  118. }
  119. }
  120. if (usedNodes == 0) {
  121. edges = addEdges(edges, &numOfEdges, newNode, newNodeI, newNodeJ, rows, columns);
  122. }
  123. int edgeIndex;
  124. Edge *newEdge;
  125.  
  126. while (1) {
  127. edgeIndex = rand()%numOfEdges;//((double)rand() / (RAND_MAX + 1.0)) * numOfEdges;
  128. newEdge = edges[edgeIndex];
  129. if (newEdge->pointA != -1) {
  130. break;
  131. }
  132. }
  133.  
  134. int pointB = newEdge->pointB;
  135. int pointA = newEdge->pointA;
  136. if (!nodes[pointB]) {
  137. mat[pointA][pointB] = 1;
  138. mat[pointB][pointA] = 1;
  139. nodes[pointB] = 1;
  140. }
  141. newEdge->pointA = -1;
  142. newEdge->pointB = -1;
  143.  
  144. newNode = pointB;
  145. newNodeJ = newNode % columns;
  146. newNodeI = newNode / columns;
  147.  
  148.  
  149. int flag = 1;
  150. for (int i = 0; i < numOfEdges; i++)
  151. {
  152. Edge *n;
  153. n = edges[i];
  154. if (n->pointA != -1) {
  155. flag = 0;
  156. break;
  157. }
  158. }
  159. if (flag == 1) break;
  160. }
  161. }
  162.  
  163. int main() {
  164.  
  165. int val, command;
  166. int rows, columns;
  167. int numOfNodes;
  168.  
  169.  
  170.  
  171. menu();
  172. printf("upisi komandu: \n");
  173. scanf("%d", &command);
  174. while (command >= 1 && command <= 8) {
  175. switch (command) {
  176. case 1:
  177. printf("uneti broj vrsta i kolona\n");
  178. scanf("%d %d", &rows, &columns);
  179. numOfNodes = rows * columns;
  180. int **mat = malloc(numOfNodes * sizeof(int*));
  181. for (int i = 0; i < numOfNodes; i++) {
  182. mat[i] = calloc(numOfNodes,sizeof(int));
  183. }
  184. input(mat, rows, columns, numOfNodes);
  185. break;
  186. case 2: print(mat, rows, columns); break;
  187. case 3: break;
  188. case 4: break;
  189. case 5: break;
  190. case 6: break;
  191. case 7: break;
  192.  
  193. }
  194. printf("upisi komandu: ");
  195. scanf("%d", &command);
  196. }
  197.  
  198. scanf_s("%d", &val);
  199. return 0;
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement