Scrivere un funzione ricorsiva
che presa in input una stringa (ordinata lessicograficamente) stampi tutti i suoi
anagrammi (permutazioni di caratteri) ordinati in maniera lessicografica.
N.B. Ottimo per il gioco Geo Challenge di Facebook!!!!
/* http://juni0rblog.blogspot.com/ */
/* juni0r87@yahoo.it */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 255 /* massima lunghezza di una parola */
void anagr(char *pref, char *string);
void anagrammi(char *string);
void elimina(char *string, char *temp, int k);
void attacca(char *string, char *temp, char c);
int main(){
char string[MAX];
scanf("%s", string);
printf("n");
anagrammi(string);
return 0;
}
/* Stampa tutte le parole ottenute concatenando la parola contenuta in
prefisso con gli anagrammi della parola contenuta in word. */
void anagr(char *pref, char *string){
int stringl,k;
char newstring[MAX];
char newpref[MAX];
char c;
int us['z'-'a'+1]={0};
stringl = strlen(string);
if (stringl == 0)
printf("%sn", pref);
else{
for(k=0 ; k<stringl ; k++){
c = string[k];
if(us[c-'a'] == 0){
us[c-'a'] = 1;
attacca(newpref, pref, c);
elimina(newstring, string, k);
anagr(newpref, newstring);
}
}
}
}
void anagrammi(char *string){
anagr("", string);
}
/* Copia in string la parola ottenuta aggiungendo alla parola in
temp il carattere c.*/
void attacca(char *string, char *temp, char c){
int l;
l = strlen(temp);
strcpy(string, temp);
string[l] = c;
string[l+1] = ''; /* aggiungo il carattere di fine stringa */
}
/* Copia in word la parola ottenuta togliendo dalla parola in
temp il carattere in posizione k.*/
void elimina(char *string, char *temp, int k){
int i,l;
l = strlen(temp);
for(i=0; i<k ; i++)
string[i] = temp[i];
for(i=k; i<l-1 ; i++)
string[i] = temp[i+1];
string[l-1] = '';
}
Ricerca appunti sul web
Ricerca personalizzata
sabato 28 febbraio 2009
Sorgenti c : Anagrammi
Pubblicato da Baiox alle 00:38
Etichette: Informatica, Programmazione C
Iscriviti a:
Commenti sul post (Atom)
0 commenti:
Posta un commento