есть такая программка. она позволяет построить списки смежности для данного ориентированного графа (вообщем-то матрицу смежности). N - количество вершин графа. Вопрос: как переделать программу так, чтобы N задавалось пользователем?
#include <iostream.h>
#include <conio.h>
#define N 4
#define TRUE 1
#define FALSE 0
typedef struct zveno *svqz;
typedef struct zveno
{
int Key;
svqz Sled;
} Leader;
class Spisok {
private:
svqz beg[N+1];
svqz res;
void Poisk (svqz,int);
public:
Spisok ();
svqz GetPoisk () { return res; }
void MakeGraph ();
void PrintGraph ();
void AddGraph (int,int);
};
void main ()
{
clrscr();
Spisok A;
int x;
int y;
A.MakeGraph ();
cout<<"predstavlenie grafa spiskami smegnosti\n";
A.PrintGraph (); cout<<endl;
getch();
}
void Spisok::Poisk (svqz uksp,int ment)
{
svqz q;
res = NULL; q = uksp;
while ((q!=NULL)&&(res==NULL))
{ if ((*q).Key==ment) res = q; q = (*q).Sled; }
}
void Spisok::AddGraph (int x,int y)
{
svqz ukzv,uzel;
if (beg[x]!=NULL)
{
Poisk (beg[x],y);
if (GetPoisk()==NULL)
{
uzel = new (Leader);
(*uzel).Key = y; (*uzel).Sled = NULL; ukzv = beg[x];
while ((*ukzv).Sled!=NULL)
ukzv = (*ukzv).Sled;
(*ukzv).Sled = uzel; }
}
else { beg[x] = new (zveno);(*beg[x]).Key = y; (*beg[x]).Sled = NULL; }
}
void Spisok::MakeGraph ()
{
int x,y;
cout<<"vvodite nachalo dygi: "; cin>>x;
cout<<"vvodite konec dygi: "; cin>>y;
while (x!=0)
{
AddGraph (x,y);
cout<< "vvodite nachalo dygi: "; cin>>x;
cout<<"vvodite konec dygi: "; cin>>y;
}
}
void Spisok::PrintGraph ()
{
svqz ukzv;
for (int i=1;i<N+1;i++)
{ cout<<"..."<<i; ukzv = beg[i];
while (ukzv!=NULL) { cout<<(*ukzv).Key; ukzv = (*ukzv).Sled; }
cout<<endl;
}
}
Spisok::Spisok() { for (int i=0;i<N+1;i++) beg[i] = NULL; }