Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <graphics.h>
- #include <windows.h>
- #include <time.h>
- #include <stdlib.h>
- #include <string.h>
- using namespace std;
- ifstream f("in.txt");
- typedef struct node
- {
- int dx;
- int dy;
- int level;
- int visited;
- char content[10];
- };
- node nodes[100];
- int nrNodes, nrEdges, graphMatrix[100][100], root=1;
- int frameWidth=1000, frameHeight=800;
- void buildMatrix()
- {
- int i, j, k;
- f>>nrNodes>>nrEdges;
- for(k=1;k<=nrEdges;k++)
- {
- f>>i>>j;
- graphMatrix[i][j]++;
- }
- }
- int isChildren(int i, int j)
- {
- //int nr=0;
- if(graphMatrix[i][j])
- return 1;
- else
- return 0;
- }
- int nrChildren(int i)
- {
- int nr=0;
- for(int j=1; j<=nrNodes; j++)
- if(graphMatrix[i][j])
- nr++;
- return nr;
- }
- int isBrother(int i, int j)
- {
- if(nodes[i].dy == nodes[j].dy)
- return 1;
- else
- return 0;
- }
- void drawNode(int i, int horiz, int verti)
- {
- char p[2];
- itoa(i,p,10);
- circle(horiz, verti, 15);
- outtextxy(horiz-4, verti-9, &p[0]);
- nodes[i].dx = horiz;
- nodes[i].dy = verti;
- nodes[i].level=1;
- nodes[i].visited=1;
- }
- void drawLine(int x1, int y1, int x2, int y2)
- {
- line (x1, y1, x2, y2-15);
- }
- void ini()
- {
- nodes[root].content[0] = '1';
- drawNode(root, frameWidth/2, 20);
- delay(1000);
- }
- int main()
- {
- initwindow(frameWidth, frameHeight, "P System");
- buildMatrix();
- ini();
- int currentNode = 1, t, v=60;
- do
- {
- //int nrdesc = nrChildren(currentNode);
- t = 50; //interval intre nodurile frati
- int ok=0;
- for(int i=1; i<=nrNodes; i++)
- {
- if(isChildren(currentNode, i) && nodes[i].visited==0)
- {
- if(ok==0 && !isBrother(currentNode, currentNode-1))
- {
- drawNode(i, nodes[currentNode].dx-t, nodes[currentNode].dy+v);
- delay(1000);
- ok=1;
- }
- else{
- drawNode(i, nodes[currentNode].dx+t, nodes[currentNode].dy+v);
- delay(1000);
- }
- }
- if(isChildren(currentNode, i) && nodes[currentNode].visited==0)
- {
- cout<<i<<" "<<"|"<<nodes[i].dx<<"|"<<nodes[i].dy;
- drawNode(currentNode, nodes[i].dx+100, nodes[i].dy-60);
- }
- }
- currentNode++;
- }while(currentNode<=nrNodes);
- for(int i=1; i<=nrNodes; i++)
- {
- for(int j=1; j<=nrNodes; j++)
- if(graphMatrix[i][j]!=0)
- {
- drawLine(nodes[i].dx, nodes[i].dy, nodes[j].dx, nodes[j].dy);
- delay(100);
- }
- }
- while(1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement