fork download
  1. #include <stdio.h>
  2.  
  3. #define N 4
  4. int board[N]; // i-ci sətrdəki vezirin sütunu
  5. int count = 0;
  6.  
  7. // Təhlükəsizliyi yoxlayır
  8. int safe(int row, int col, int placed_rows[]) {
  9. for (int i = 0; i < row; i++) {
  10. if (placed_rows[i] && (board[i] == col || (row - i) == (col - board[i]) || (row - i) == (board[i] - col)))
  11. return 0;
  12. }
  13. return 1;
  14. }
  15.  
  16. // Rekursiv yerləşdirmə
  17. void solve(int row, int placed, int placed_rows[]) {
  18. if (placed == 3) { // 3 vezir yerləşdirildi
  19. count++;
  20. return;
  21. }
  22. if (row == N) return; // artıq sətr yoxdursa geri dön
  23.  
  24. for (int col = 0; col < N; col++) {
  25. if (safe(row, col, placed_rows)) {
  26. board[row] = col;
  27. placed_rows[row] = 1; // bu sətrdə vezir qoyuldu
  28. solve(row + 1, placed + 1, placed_rows);
  29. placed_rows[row] = 0; // geri çək
  30. }
  31. }
  32. // Bu sətrdə heç vezir qoymadan növbəti sətrə keç
  33. solve(row + 1, placed, placed_rows);
  34. }
  35.  
  36. int main() {
  37. int placed_rows[N] = {0};
  38. solve(0, 0, placed_rows);
  39. printf("4x4 taxtada 3 veziri yerləşdirməyin yolları: %d\n", count);
  40. return 0;
  41. }
Success #stdin #stdout 0s 5300KB
stdin
Standard input is empty
stdout
4x4 taxtada 3 veziri yerləşdirməyin yolları: 24