Share the joy
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Haide-ti sa va spun despre ce este vorba se da o tabla de sah, sau o tabla asemanatoare uneia de sah si se cere sa se aseze un anumit numar n de regine astfel incat nici macar una dintre ele sa nu atace alta. Mai intai o sa va spun miscarile reginelor pentru cei care nu stiu, o regina are drept de miscare si de atacare pe: verticala, orizontala si pe diagonala indiferent de numarul de patratele. Eu am gasit o metoda simpla de rezolvare, bineinteles folosindu-ma si de internet, este vorba de acest program in C:

”#define N 4
#include<stdio.h>
void printSolution(int board[N][N])
{
int i,j;
for ( i = 0; i < N; i++)
{
for ( j = 0; j < N; j++)
printf(” %d “, board[i][j]);
printf(“\n”);
}
}
isSafe(int board[N][N], int row, int col)
{
int i, j;

/* Check this row on left side */
for (i = 0; i < col; i++)
{
if (board[row][i])
return 0;
}
for (i = row, j = col; i >= 0 && j >= 0; i–, j–)
{
if (board[i][j])
return 0;
}
for (i = row, j = col; j >= 0 && i < N; i++, j–)
{
if (board[i][j])
return 0;
}

return 1;
}
solveNQUtil(int board[N][N], int col)
{
if (col >= N)
return 1;
int i;
for ( i = 0; i < N; i++)
{
if ( isSafe(board, i, col) )
{
board[i][col] = 1;
if ( solveNQUtil(board, col + 1) == 1 )
return 1;
board[i][col] = 0; // BACKTRACK
}
}
return 0;
}
solveNQ()
{
int board[N][N] = { {0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0}
};

if ( solveNQUtil(board, 0) == 0 )
{
printf(“Solutia nu exista”);
return 0;
}

printSolution(board);
return 1;
}
int main()
{
solveNQ();

getchar();
return 0;
}

Voi completati cu cate patratele are tabla voatra de sah. Nu uitati sa odificati si la define N4. Multa bafta si sper ca v-am fost de folos.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>