Mám program, který řadí skupiny za sebou tak, aby druhé písmeno v první skupině bylo stejné jako první písmeno v druhé skupině.
Příklad
Mám takovouto skupinu: AA CB AC BA BD DB
Jedno z možných řešení je například toto: CB BD DB BA AA AC
Program na seřazení mám sice hotový, nicméně pokud je počet skupin větší než 50, trvá hodiny, než se skupiny seřadí. Potřebuji nějakou aspoň drobnou radu, která by mi pomohla udělat program efektivnější, aby se můj problém vyřešil během několika vteřin/minut. Chyby prosím přehlédněte, jsem začátečník, programování se věnuji měsíc.
#include <stdio.h>
#include <stdlib.h>
void permutace(char skupina[][2],int buffer,int pocet)
{
int i,j;
char temp;
if(buffer==pocet && skupina[1][1]==skupina[pocet][2])
{
for(i=1;i<pocet;i++)
if(skupina[i][2]!=skupina[i+1][1]) break;
if(i==pocet)
{
FILE*output;
output=fopen("vystup.txt","a");
for(j=1;j<=pocet;j++)
{
fprintf(output,"%c %c\n",skupina[j][1],skupina[j][2]);
}
exit(1);
}
}
else
{
for(i=buffer;i<=pocet;i++)
{
temp=skupina[buffer][1];
skupina[buffer][1]=skupina[i][1];
skupina[i][1]=temp;
temp=skupina[buffer][2];
skupina[buffer][2]=skupina[i][2];
skupina[i][2]=temp;
permutace(skupina,buffer+1,pocet);
temp=skupina[buffer][1];
skupina[buffer][1]=skupina[i][1];
skupina[i][1]=temp;
temp=skupina[buffer][2];
skupina[buffer][2]=skupina[i][2];
skupina[i][2]=temp;
}
}
}
int main()
{
FILE*input;
input=fopen("vstup.txt","r");
int pocet,i,j;
fscanf(input,"%d",&pocet);
char skupina[pocet][2];
char k;
for(i=1;i<=pocet;i++)
{
fscanf(input,"%s",&skupina[i][1]);
fscanf(input,"%s",&skupina[i][2]);
}
permutace(skupina,1,pocet);
}
V souboru vstup.txt to vypadá například takto
50
F C
A F
E F
E E
C E
F E
B F
F E
E E
E E
E E
E B
F F
F C
C A
F E
E A
B F
E F
F C
F E
A A
E E
E E
E E
E E
B C
A E
C E
C E
E B
C E
E E
E F
E F
E C
A D
E E
E E
D A
E B
C C
E E
E E
F A
A C
C E
E B
B D
D F