Pagini recente » Cod sursa (job #556526) | Cod sursa (job #2590710) | Cod sursa (job #2609561) | Cod sursa (job #3181975) | Cod sursa (job #652659)
Cod sursa(job #652659)
#include <stdio.h>
#include <string.h>
struct Secv
{
char sir[30001];
} secvente[20];
int n;
int m[20][20];
int min=2000000000;
char mins[540000];
int comun(int primu, int aldoilea){
int j,i;
int k;
int lp,ld;
int comune=0;
int max=0;
lp=strlen(secvente[primu].sir);
ld=strlen(secvente[aldoilea].sir);
for(i=0;i<lp;i++) {
comune=0;
j=0;
k=i;
while(j<ld && k<lp){
if(secvente[primu].sir[k]==secvente[aldoilea].sir[j]) {
comune++;
}
else break;
k++;
j++;
}
if(comune>max && (k==lp ||j==ld)) max=comune;
}
return max;
}
void determinacomune(){
int i,j;
for(i=0;i<n;i++) for(j=0;j<n;j++) if(i!=j){
m[i][j]=comun(i,j);
}
}
void citeste()
{
FILE *f=fopen("adn.in","r");
fscanf(f,"%d",&n);
int i;
for(i=0; i<n; i++) fscanf(f,"%s",secvente[i].sir);
fclose(f);
}
void sterge(){
int x,y;
int l;
}
int verificaunicitate(int vect[20],int i){
if(vect[i]!=-1) return 0;
return 1;
}
void determina(char s[540000],int linie, int start,int l,int indice,int vect[20],int ordine){
int ltemp;
// for(int j=0;j<n;j++) printf("%d ",vect[j]);
if(ordine==n) printf("%s %d\n",s,l);
// else printf("\n");
if(l>min) return ;
if(ordine==n)
if(l<min) { strcpy(mins,s); min=l; }
int i;
for(i=0;i<n;i++) if(i!=linie ) {
if(verificaunicitate(vect,i)) {
vect[i]=ordine;
strcat(s,secvente[i].sir+m[linie][i]);
ltemp=strlen(s);
determina(s,i,start,ltemp,ltemp,vect,ordine+1);
vect[i]=-1;
s[indice]='\0';
}
}
}
int main()
{
citeste();
// for(int i=0;i<n;i++) printf("%s\n",secvente[i].sir);
determinacomune();
sterge();
int v[20];
for(int i=0;i<20;i++) v[i]=-1;
char sir[540000]="";
//strcpy(sir,secvente[0].sir);
determina(sir,0,0,0,0,v,0);
int x,y;
// for(y=0;y<n;y++) {
// for(x=0;x<n;x++) printf("%d ",m[y][x]);
// printf("\n");
// }
FILE *out=fopen("adn.out","w");
fprintf(out,"%s\n",mins);
fclose(out);
return 0;
}