|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Dec 2008
Città: italia
Messaggi: 80
|
Modifica codice in C
Come modifico il codice della generazione delle permutazioni in modo da considerare solo i prossimi vertici adiacenti???
Codice:
#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 */ } |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:33.