Hallo,
ich habe versucht mithilfe von Backtracking ein Magisches Quadrat der Größe n zu erstellen.
Bei n=3 funktioniert das auch wunderbar, nur für größere n ergeben sich riesige Laufzeiten.
Kann man die Funktion noch effizienter machen oder mache ich einen grundsätzlichen Denkfehler?
Hier mal die Kernfunktion meines Programms:
Alles anzeigen
ich habe versucht mithilfe von Backtracking ein Magisches Quadrat der Größe n zu erstellen.
Bei n=3 funktioniert das auch wunderbar, nur für größere n ergeben sich riesige Laufzeiten.
Kann man die Funktion noch effizienter machen oder mache ich einen grundsätzlichen Denkfehler?
Hier mal die Kernfunktion meines Programms:
Quellcode
- void findeLoesung (int Stufe,int* Feld,int* Wahl)
- {
- int i=0;
- while(Fertig==0)
- {
- Feld[Stufe]=Wahl[i];
- if (Gueltig(Feld)==1)
- {
- if (Stufe+1==Groesse*Groesse)
- {
- if (Gueltig2(Feld)==1)
- {
- Fertig=1;
- printf("QQÖÖQ\n");
- return;
- }
- else
- {
- Feld[Stufe]=0;
- }
- }
- else
- {
- findeLoesung(Stufe+1,Feld,Wahl);
- }
- }
- else
- {
- Feld[Stufe]=0;
- }
- if (i<Groesse*Groesse-1)
- {
- i++;
- }
- else
- {
- return;
- }
- }
- }