八皇后

  1 #include <iostream>
  2 using namespace std;
  3 
  4 #define N 8
  5 
  6 int a[N][N] = { 0 };
  7 
  8 bool judge(int a[][N],int b,int c)//b行 c列
  9 {
 10 
 11     for (int i = 0; i < N; i++)//判断行
 12     {
 13         if (a[b][i] == 1)
 14         {
 15             return false;
 16         }
 17     }
 18 
 19     for (int j = 0; j < N; j++)//判断列
 20     {
 21         if (a[j][c] == 1)
 22         {
 23             return false;
 24         }
 25     }
 26 
 27     int tempB = b;
 28     int tempC = c;
 29 
 30     while (tempB >= 1 && tempC < N-1)
 31     {
 32         tempB--;
 33         tempC++;
 34 
 35         if (a[tempB][tempC] == 1)
 36         {
 37             return false;
 38         }
 39     }
 40 
 41     tempB = b;
 42     tempC = c;
 43     while (tempB < N-1 && tempC >= 1)
 44     {
 45         tempB++;
 46         tempC--;
 47 
 48         if (a[tempB][tempC] == 1)
 49         {
 50             return false;
 51         }
 52     }
 53 
 54     tempB = b;
 55     tempC = c;
 56     while (tempB >= 1 && tempC >= 1)
 57     {
 58         tempB--;
 59         tempC--;
 60 
 61         if (a[tempB][tempC] == 1)
 62         {
 63             return false;
 64         }
 65     }
 66 
 67     tempB = b;
 68     tempC = c;
 69     while (tempB < N-1 && tempC < N-1)
 70     {
 71         tempB++;
 72         tempC++;
 73 
 74         if (a[tempB][tempC] == 1)
 75         {
 76             return false;
 77         }
 78     }
 79 
 80     return true;
 81 }
 82 
 83 void print()
 84 {
 85     for (int i = 0; i < N; i++)
 86     {
 87         for (int j = 0; j < N; j++)
 88         {
 89             cout << a[i][j] << "  ";
 90         }
 91         cout << endl;
 92     }
 93 }
 94 
 95 int count1 = 0;
 96 
 97 void fun(int a[][N], int b)//b行,c列
 98 {
 99     if (b == N)//说明第七行已经放下了
100     {
101         print();
102         cout << ++count1 << "" << endl;
103         system("pause");
104         return;
105     }
106     else
107     {
108         for (int i = 0; i < N; i++)//遍历列
109         {
110             if ( judge(a, b, i) )
111             {
112                 a[b][i] = 1;
113                 fun(a, b + 1);
114                 a[b][i] = 0;
115             }
116         }
117     }
118 }
119 
120 int main()
121 {
122     fun(a, 0);
123 
124     system("pause");
125     return 0;
126 }
原文地址:https://www.cnblogs.com/xiaochi/p/5035633.html