fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define SIZE 8
  6.  
  7. int main() {
  8. int board[SIZE][SIZE];
  9. int queensPlaced = 0;
  10.  
  11. srand(time(NULL));
  12.  
  13. while (queensPlaced < SIZE) {
  14. for (int r = 0; r < SIZE; r++) {
  15. for (int c = 0; c < SIZE; c++) {
  16. board[r][c] = 0;
  17. }
  18. }
  19. queensPlaced = 0;
  20.  
  21. for (int q = 0; q < SIZE; q++) {
  22. int validMoves = 0;
  23. for (int r = 0; r < SIZE; r++) {
  24. for (int c = 0; c < SIZE; c++) {
  25. if (board[r][c] == 0) {
  26. validMoves++;
  27. }
  28. }
  29. }
  30.  
  31. if (validMoves == 0) {
  32. break;
  33. }
  34.  
  35. int move = rand() % validMoves;
  36. int count = 0;
  37. int placed = 0;
  38.  
  39. for (int r = 0; r < SIZE && !placed; r++) {
  40. for (int c = 0; c < SIZE && !placed; c++) {
  41. if (board[r][c] == 0) {
  42. if (count == move) {
  43. board[r][c] = 1;
  44. queensPlaced++;
  45. placed = 1;
  46.  
  47. for (int i = 0; i < SIZE; i++) {
  48. for (int j = 0; j < SIZE; j++) {
  49. if (board[i][j] == 0 && !(i == r && j == c)) {
  50. if (i == r || j == c || (i - j) == (r - c) || (i + j) == (r + c)) {
  51. board[i][j] = -1;
  52. }
  53. }
  54. }
  55. }
  56. }
  57. count++;
  58. }
  59. }
  60. }
  61. }
  62. }
  63.  
  64. for (int r = 0; r < SIZE; r++) {
  65. for (int c = 0; c < SIZE; c++) {
  66. if (board[r][c] == 1) {
  67. printf(" Q ");
  68. } else {
  69. printf(" . ");
  70. }
  71. }
  72. printf("\n");
  73. }
  74.  
  75. return 0;
  76. }
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
 .  Q  .  .  .  .  .  . 
 .  .  .  .  Q  .  .  . 
 .  .  .  .  .  .  Q  . 
 Q  .  .  .  .  .  .  . 
 .  .  Q  .  .  .  .  . 
 .  .  .  .  .  .  .  Q 
 .  .  .  .  .  Q  .  . 
 .  .  .  Q  .  .  .  .