Gli altri 2 programmini :
int Chr[100]; /* vettore soluzione (permutazione) */
int Chr1[100]; /* soluzione inversa */
int nChr=0; /* numero soluzioni costruite dalla procedura esaustiva */
int Succ=1; /* flag che indica il successo della procedura esaustiva */
int n=3; /* numero vertici digrafi */
/* procedura di inizializzazione dei vettori soluzione (Chr[] e Chr1[]) */
void initChr()
{
int i=0;
for(i=0;i<n;i++)
{
Chr[i]=n;
Chr1[i]=n;
}
}
/* procedura di stampa di Chr[] */
void stampaVett()
{
int i=0;
for(i=0;i<n;i++)
printf ("%d ",Chr[i]);
printf("\n");
}
/* procedura esaustiva di calcolo soluzioni */
/* metto 0 nella prima posizione e generola permutazione su 1 2,
poi metto 1 nella prima posizione e genero la permutazione su 0 2,
ed infine metto 2 nella prima posizione e genero la permutazione su 0 1 , */
void genTPerm(int k)
{
int i=0;
if(k>(n-1))
{
stampaVett();
/* verifica se la soluzione trovata è un ciclo: se si succ=1 e termina genTPerm */
nChr++;
if(nChr>n)
{
Succ=0;
return ;
}
}
else
for(i=0;i<n;i++)
{if(Chr1[i]==n)
{Chr[k]=i;
Chr1[i]=k;
genTPerm(k+1);
Chr1[i]=n;
Chr[k]=n;
}
}
}
/* programma principale */
int main(void)
{
int i=0, k=0;
/* inizializza variabili, vettori e strutture dati */
nChr = 0;
initChr(); /* procedura che inizializza Chr e Chr1 */
genTPerm(0); /* procedura esaustiva per il calcolo di soluzioni */
}
* Definisco un nuovo tipo per le matrici.. */
#define N 10
typedef int matrice[N][N];
void degrees();
void genera_matrice(matrice m, size_t n, double p) {
size_t i = 0, j = 0;
assert(n <= N);
srand((unsigned) time(NULL));
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) { m[i][j] = rand() < p * RAND_MAX ? 1 : 0; }
}
}
void stampa_matrice(matrice m, size_t n) {
size_t i = 0, j = 0;
assert(n <= N);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) { printf("%d ", m[i][j]); }
printf("\n");
}
}
int main(void)
{ int i;
double p = 0.5;
size_t n = 5;
matrice m;
int indegrees[N], outdegrees[N];
genera_matrice(m, n, p);
stampa_matrice(m, n);
}
return 0;
}