Ciao a tutti,
ho il seguente problema: voglio creare una classe che si occupi di generare un array bidimensionale (che ho chiamato A).
il mio problema e' che la dimensione dell'array (nodi) la vorrei inserire io con un "cin" e non so come fare dato che se creo un array non specificandone la dimensione il compiler mi da errore. Sono alle prime armi e per ora ho raggirato l'ostacolo inserendo tutto nella funzione main ma la cosa è ingestibile...
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <ctime>
using namespace std;
int main()
{
srand(time(0));
int nodi;
cout << "Selezionare il numero di nodi desiderato: ";
cin >> nodi;
int commodity;
cout << "\nSelezionare il numero di commodity desiderato: ";
cin >> commodity;
// matrice di ADIACENZA (random)
int i;
int j;
double num;
double rnd;
int A[nodi][nodi];
for (i=0; i<nodi; i++)
{
for (j=0; j<nodi; j++)
{
if (i==j)
A[i][j] = 0;
else
{
num = 1 + rand()%RAND_MAX;
rnd = num/ RAND_MAX;
if (rnd > 0.4)
A[i][j] = 1;
else
A[i][j] = 0;
}
}
}
// genera sorgenti e pozzi
int k;
int Sorgente[commodity];
int Pozzo[commodity];
int Domanda[commodity];
for (k=0; k < commodity; k++)
{
do
{
Sorgente[-1]=-1;
Pozzo[-1]=-1;
Sorgente[k] = rand() % nodi;
Pozzo[k] = rand() % nodi;
Domanda[k] = (10+rand()% nodi);
}while(Sorgente[k] == Pozzo[k] || Sorgente[k-1] == Pozzo[k]||Pozzo[k-1]== Sorgente[k]);
}
/*Assicurati che esista almeno un cammino (un arco) tra sorgente e
pozzo per la stessa commodity*/
for (k=0; k<commodity; k++)
{
j=Sorgente[k];
for (i=0; i<nodi; i++)
{
if(A[i][j]==1)
A[i][j]=0;
}
i=Pozzo[k];
for (j=0; j<nodi; j++)
{
if(A[i][j]==1)
A[i][j]=0;
}
}
for (k=0; k<commodity; k++)
{
i=Sorgente[k];
j=Pozzo[k];
if(A[i][j]==0)
A[i][j]=1;
}
/* Assegno un nome ad ogni arco modificando la matrice di adiacenza */
int nome_arco = 1;
for (i=0; i<nodi; i++)
{
for (j=0; j<nodi; j++)
{
if(A[i][j] ==1)
{
A[i][j] = nome_arco;
nome_arco++;
}
}
}
system("PAUSE");
return EXIT_SUCCESS;
}