Acht Damen und was Delphi damit zu tun hat...

K

Klon

So Leutz ich brauch dringend eure Hilfe, folgende Aufgabe:

Verteile 8 Damen so auf einem Schachbrett das sie sich nicht gegenseitig schlagen können.

Das alleine ist schon ne Aufgabe für ne halbe Stunde, eine der 21 Möglichen Konstelationen zu finden.

Jetzt das wirkliche Problem, ich muss ein Delphi Programm schreiben das die acht Damen in ein Stringgrid von 8*8 Feldern schreibt (das soll das Schachbrette sein).

Das ganze soll halt nach mathematischem Denken passieren, also eine Function/Procedure soll ausrechnen wo die Damen zu stehen haben.

Bedingung:
Das StringGrid darf nur zur ausgabe verwendet werden (also nicht einfach den Rechner die Damen reinschreiben lassen, alle senkrechten, wagerechten und diagonalen Felder mit Nullen volschreiben lassen, was dann ja die Felder wären an denen keine Damen stehen darf, und ihn das dann solange neu machen lassen bisses past) soll heißen, ich brauch nen anderen Weg wie die Kiste die Positionen berechnen kann.

Helft mir plz :(

Klon
 
*Gröhl*

Du vergisst den größten gemeinsamen Teiler.
Eigentlich daß erste mit dem sie einen nerven.

Pfote, Kojote
 
FALSCH KOJOTE!!!

das allererste mit dem sie einen nerven, ist das:

<center><font color="#800000"><b>HELLO WORLD</b></font></center>


das heiligste aller programmier-beispiele!!!

kennt übrigens einer das kaffe-und-kuchen-programm???


so long
 
Hehe alles insider witze hier muha ;)

Na ja danke schon mal, der c source wird mir sicherlich helfen...
 
da!

keine garantie das es funzt, habs von einem bekannten bekommen. is in c, rekursiv!!!!
Code:
<font color="#800000" size="2" face="Courier New, Courier">
#include&lt;stdio.h&gt;
#include&lt;conio.h&gt;
#include&lt;stdlib.h&gt;

/* Die Ausgabe ist so zu lesen:
   - die Zaehlung der Zeilen beginnt bei 0
   - Zahlen die in einer Reihe stehen entsprechen der Zeile
   - die Anzahl der Zeilen betraegt 8 und entspricht den Spalten des Schachbrettes
   z.B. Spalte:  1   2   3   4   5   6   7   8  => x-Achse
        Zeile:   0   4   7   5   2   6   1   3  => y-Achse
*/

#define MAX 8

void Permut  (int,int*);
void Tausch  (int,int,int*);
void Ausgabe (int*);
void Pruefung(int*);

int anzahl=0;

void main()
{
	int tiefe=0,feld[MAX]={0,1,2,3,4,5,6,7};

	Permut(tiefe,feld);
	printf("ANZAHL: %d\n",anzahl);
} //main

void Pruefung(int *feld)
{
	int i,j,k,figuren;

	for (k=0;k&lt;MAX;k++)		//Prüfung der 1.Hälfte des Feldes
	{						//Diagonalen nach rechts unten
		for (i=0,j=k,figuren=0;j&lt;MAX;i++,j++)
		{
			if (feld[i]==j)
				figuren++;
		} //for
		if (figuren&gt;1)
		{
			return;
		} //if
	} //for

	for (k=7;k&gt;=0;k--)		//Prüfung der 1.Hälfte des Feldes
	{						//Diagonalen nach links unten
		for (i=k,j=0,figuren=0;i&gt;=0;i--,j++)
		{
			if (feld[i]==j)
				figuren++;
		} //for
		if (figuren&gt;1)
		{
			return;
		} //if
	} //for

	for (k=0;k&lt;MAX;k++)		//Prüfung der 2.Hälfte des Feldes
	{						//Diagonalen nach rechts unten
		for (i=k,j=0,figuren=0;i&lt;MAX;i++,j++)
		{
			if (feld[i]==j)
				figuren++;
		} //for
		if (figuren&gt;1)
		{
			return;
		} //if
	} //for

	for (k=0;k&lt;MAX;k++)		//Prüfung der 2.Hälfte des Feldes
	{						//Diagonalen nach links unten
		for (i=7,j=k,figuren=0;j&lt;MAX;i--,j++)
		{
			if (feld[i]==j)
				figuren++;
		} //for
		if (figuren&gt;1)
		{
			return;
		} //if
	} //for
	anzahl++;
	Ausgabe(feld);
	if (anzahl%23==0)
	{
		getch();
		system("cls");
	} //if
} //Pruefung

void Permut(int tiefe,int *feld)
{
	int i;

	if ((tiefe+1)==MAX)
		Pruefung(feld); //Ausgabe(feld);

	else
	{
		for (i=tiefe;i&lt;MAX;i++)
		{
			Tausch(tiefe,i,feld);
			Permut(tiefe+1,feld);
			Tausch(i,tiefe,feld);
		} //for
	} //else
} //Permut

void Tausch(int index1,int index2,int *feld)
{
	int x;

	x=feld[index1];
	feld[index1]=feld[index2];
	feld[index2]=x;
} //Tausch

void Ausgabe(int *feld)
{
	int i;
	for (i=0;i&lt;MAX;i++)
		printf("%d ",feld[i]);
	printf("\n");
} //Ausgabe
</font>
 
Zurück