Advertisement
Guest User

Untitled

a guest
Apr 15th, 2015
489
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.89 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <graphics.h>
  4. #include <windows.h>
  5. #include <time.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8.  
  9. using namespace std;
  10. ifstream f("in.txt");
  11.  
  12. typedef struct node
  13. {
  14. int dx;
  15. int dy;
  16. int level;
  17. int visited;
  18. char content[10];
  19. };
  20.  
  21. node nodes[100];
  22.  
  23. int nrNodes, nrEdges, graphMatrix[100][100], root=1;
  24.  
  25. int frameWidth=1000, frameHeight=800;
  26.  
  27. void buildMatrix()
  28. {
  29. int i, j, k;
  30.  
  31. f>>nrNodes>>nrEdges;
  32.  
  33. for(k=1;k<=nrEdges;k++)
  34. {
  35. f>>i>>j;
  36. graphMatrix[i][j]++;
  37. }
  38. }
  39.  
  40. int isChildren(int i, int j)
  41. {
  42. //int nr=0;
  43. if(graphMatrix[i][j])
  44. return 1;
  45. else
  46. return 0;
  47. }
  48.  
  49. int nrChildren(int i)
  50. {
  51. int nr=0;
  52. for(int j=1; j<=nrNodes; j++)
  53. if(graphMatrix[i][j])
  54. nr++;
  55. return nr;
  56. }
  57.  
  58. int isBrother(int i, int j)
  59. {
  60. if(nodes[i].dy == nodes[j].dy)
  61. return 1;
  62. else
  63. return 0;
  64. }
  65.  
  66. void drawNode(int i, int horiz, int verti)
  67. {
  68. char p[2];
  69. itoa(i,p,10);
  70. circle(horiz, verti, 15);
  71. outtextxy(horiz-4, verti-9, &p[0]);
  72. nodes[i].dx = horiz;
  73. nodes[i].dy = verti;
  74. nodes[i].level=1;
  75. nodes[i].visited=1;
  76. }
  77.  
  78. void drawLine(int x1, int y1, int x2, int y2)
  79. {
  80. line (x1, y1, x2, y2-15);
  81. }
  82.  
  83. void ini()
  84. {
  85. nodes[root].content[0] = '1';
  86. drawNode(root, frameWidth/2, 20);
  87. delay(1000);
  88. }
  89.  
  90. int main()
  91. {
  92. initwindow(frameWidth, frameHeight, "P System");
  93. buildMatrix();
  94. ini();
  95. int currentNode = 1, t, v=60;
  96. do
  97. {
  98. //int nrdesc = nrChildren(currentNode);
  99. t = 50; //interval intre nodurile frati
  100. int ok=0;
  101.  
  102. for(int i=1; i<=nrNodes; i++)
  103. {
  104. if(isChildren(currentNode, i) && nodes[i].visited==0)
  105. {
  106.  
  107. if(ok==0 && !isBrother(currentNode, currentNode-1))
  108. {
  109. drawNode(i, nodes[currentNode].dx-t, nodes[currentNode].dy+v);
  110. delay(1000);
  111. ok=1;
  112. }
  113. else{
  114. drawNode(i, nodes[currentNode].dx+t, nodes[currentNode].dy+v);
  115. delay(1000);
  116.  
  117. }
  118. }
  119. if(isChildren(currentNode, i) && nodes[currentNode].visited==0)
  120. {
  121. cout<<i<<" "<<"|"<<nodes[i].dx<<"|"<<nodes[i].dy;
  122.  
  123. drawNode(currentNode, nodes[i].dx+100, nodes[i].dy-60);
  124. }
  125. }
  126. currentNode++;
  127. }while(currentNode<=nrNodes);
  128.  
  129. for(int i=1; i<=nrNodes; i++)
  130. {
  131. for(int j=1; j<=nrNodes; j++)
  132. if(graphMatrix[i][j]!=0)
  133. {
  134. drawLine(nodes[i].dx, nodes[i].dy, nodes[j].dx, nodes[j].dy);
  135. delay(100);
  136. }
  137. }
  138. while(1);
  139. return 0;
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement