написал:строится граф по матрице весов дуг.осталось придумать как номера вершин расставить и направления,но основная работа сделана
| Код | #include <graphics.h> #include <iostream.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <string.h>
int Gd=DETECT,Gm,ErrC; int mx,my; int maxnodes=0; int a[20][20];
void init_graph(); void draw_graf(); int rnd(int,int);
int rnd(int a,int b) { return a+abs(random(b-a+1)); }
void init_graph() { clrscr(); initgraph(&Gd,&Gm,"\drivers"); ErrC=graphresult(); if (ErrC!=grOk) { cout<<"Error:"<<grapherrormsg(ErrC); getch(); exit(-1); } setbkcolor(BLACK); mx=getmaxx(); my=getmaxy(); }
void draw_graf() { int y_c[20],x_c[20],i,j,tmp; int rad=2; for (i=1;i<=maxnodes;i++) { tmp=rnd(mx/2-100,mx/2+100); for (j=1;j<=i;j++) if (tmp==x_c[j]) tmp=rnd(mx/2-100,mx/2+100); x_c[i]=tmp; } for (i=1;i<=maxnodes;i++) { tmp=rnd(my/2-100,my/2+100); for (j=1;j<=i;j++) if (tmp==y_c[j]) tmp=rnd(my/2-100,my/2+100); y_c[i]=tmp; } for (i=1;i<=maxnodes;i++) { for (j=1;j<=maxnodes;j++) if (x_c[j]>x_c[j+1]) { x_c[j]=x_c[j]+x_c[j+1]; x_c[j+1]=x_c[j]-x_c[j+1]; x_c[j]=x_c[j]-x_c[j+1]; } } for (i=1;i<=maxnodes;i++) { if (x_c[i+1]-x_c[i]<=30) x_c[i+1]=x_c[i]+35; } x_c[1]=x_c[2]-35; for (i=1;i<=maxnodes;i++) cout<<x_c[i]<<" "; cout<<endl; for (i=1;i<=maxnodes;i++) cout<<y_c[i]<<" "; for (i=1;i<=maxnodes;i++) for (j=1;j<=maxnodes;j++) { setcolor(GREEN); circle(x_c[i],y_c[i],2); if (a[i][j]!=0) if (i+1<=maxnodes) { setcolor(BLUE); line(x_c[i],y_c[i],x_c[j],y_c[j]); } } }
main() { clrscr(); cout<<"Enter maxnodes:"; cin>>maxnodes; for (int i=1;i<=maxnodes;i++) for (int j=1;j<=maxnodes;j++) { cout<<"Enter a["<<i<<"]["<<j<<"] : "; cin>>a[i][j]; } init_graph(); draw_graf(); getch(); return 0; }
|
|