PDA

View Full Version : Modifica codice in C


mikael_c
02-09-2013, 09:48
Come modifico il codice della generazione delle permutazioni in modo da considerare solo i prossimi vertici adiacenti???
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

/*
VARIABILI GLOBALI:
n
nChr = numero di permutazioni alcolate (inizialmente 0)
Chr = permutazione
Chr1 = permutazione inversa (Chr1[i] = n equivale ad elemento di permutazione non definito
(se Chr[i]=j, allora Chr1[i]=j)
Succ = risposta della procedura genTPerm (inizialmente 1)
*/

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 */

void genTPerm(int k)
{
int i=0;

if(k>(n-1))
{

printf("\nSe k(posizione della permutazione)e maggiore del numero vertici digrafi-1 stampo il vettore ed incremento numero di soluzioni costruite \ndalla procedura esaustiva\n ");

stampaVett();

/* verifica se la soluzione trovata è un ciclo: se si succ=1 e termina genTPerm */

nChr++;

if(nChr>n)
{
Succ=0;
return ;
printf("\nSe il numero soluzioni costruite dalla procedura esaustiva\ne maggiore del numero vertici digrafi\nIl flag che indica il successo della procedura\nesaustiva diventa 0 e ritorno\n");


}
}
else
printf("\nAltrimenti:");
for(i=0;i<n;i++)
{if(Chr1[i]==n)
printf("\nSe la soluzione inversa e uguale al numero digarfi:");
{Chr[k]=i;
printf("\nIl vettore soluzione di k diventa=ad i\n");

Chr1[i]=k;printf("\nIl vettore soluzione inversa di i diventa= a k\n");

genTPerm(k+1);printf("\nIncremento k(posizione della permutazione di 1\n") ;

Chr1[i]=n;printf("\nIl vettore soluzione inversa di i=al numero digrafi\n");

Chr[k]=n;printf("\nIl vettore soluzione di k=al numero digrafi\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 */

}