public void makeInNodes() {
        int maxNumPrecedences = 0;
        
        for(int i=0; i<topologicalArray.size(); i++) {
            //Se nella posizione restituita da topologicalArray.get(i).get(0)-1
            //(num. attività - 1) di dataActArray sono presenti precedenze
            //allora le inserisco in inNodesArray, altrimenti inserisco -1.
            if(((int[])dataActArray.get(topologicalArray.get(i).get(0)-1).get(2))[0] != -1) {
                inNodesArray.add(new ArrayList<Integer>());
                for(int k=0; k<((int[])dataActArray.get(topologicalArray.get(i).get(0)-1).get(2)).length; k++) {
                    inNodesArray.get(i).add(((int[])dataActArray.get(topologicalArray.get(i).get(0)-1).get(2))[k]);
                }
            } else {
                inNodesArray.add(new ArrayList<Integer>());
                inNodesArray.get(i).add(0);
            }
        }
        
        //Calcolo il massimo numero di precedenze tra tutte le attività
        //in modo da allocare una matrice a dimensione fissa (inNodes).
        for(int i=0; i<inNodesArray.size(); i++) {
            if(inNodesArray.get(i).size() > maxNumPrecedences)
                maxNumPrecedences = inNodesArray.get(i).size();
        }
        
        //Inizializzazione matrice inNodes
        inNodes = new int[n][maxNumPrecedences];
        for(int i=0; i<n; i++) {
            for(int j=0; j<maxNumPrecedences; j++) {
                inNodes[i][j] = 0;
            }
        }
        
        //Copia degli elementi da inNodesArray alla matrice inNodes
        for(int i=0; i<inNodesArray.size(); i++) {
            for(int j=0; j<inNodesArray.get(i).size(); j++) {
                inNodes[i][j] = inNodesArray.get(i).get(j);
            }
        }
        
        makeInDegree();
        makeOutDegree();
    }