Damenproblem



  • Hallo.
    Ich habe hier einen Code zum AchtDamenProblem. Ich versuche ihn nun zu verstehen. Jedoch hänge ich an einer Stelle. Hier erstmal der Code:

    #include <stdio.h>
    #include <stdlib.h>
    
    int x[8]; /* x[i] = x coordinate of queen in row i. */
    
    //Ausgabe Feld
    void print()
    {
    	int i,j;
    
    	printf ("+----------------+\n");
    
    	for (i=0; i<8; i++) 
    	{
    		printf ("|");//Anfang von Spalte i
    
    		for (j=0; j<8; j++)
    			if (j==x[i]) 
    				printf("<>");
    			else 
    				printf("  ");
    
    		printf("|\n");//Ende von Spalte i
    	}
    	printf ("+----------------+\n\n");
    }
    
    /* tests, whether (ix, iy) is beaten by queens 0...(iy-1) */
    int is_free (int ix, int iy)
    {
    	int i;
    
    	for (i=0; i<iy; i++)
    		if ((x[i]==ix) || (abs(x[i]-ix)==abs(i-iy))) 
    			return 0;
    	return 1;
    }
    
    /* tries to place queen n on row n */
    void try (int n)
    {
    	int i;
    
    	if (n==8) 
    		print();
    	else
    		for (i=0; i<8; i++)
    			if (is_free(i,n))
    			{
    				x[n]=i;
    				try (n+1);
    			}
    }
    
    int main ()
    {
    	try (0);
    
    	return 0;
    }
    

    Und zwar verstehe ich nicht wo das abs() in der Funktion is_free() herkommt.

    Kann mir da jemand helfen ?

    Mfg Dominic



  • Weil eine Dame diagonal in 4 Richtungen schlagen kann, und du eigentlich nur nachschauen willst, ob das gefragte Feld auf einer Diagonale einer dame liegt. Das heißt aber wiederum, daß die x- und die y-Differerenz der Koordinaten gleich sein muß (und zwar der Betrag davon).


Anmelden zum Antworten