2015-04-05 70 views
0

所以我必须在棋盘上安排8个皇后,所以他们不能互相残杀。 我一直在这个工作了一段时间,需要一些帮助。我开始使用二维数组。我在第一排随机放置了一个(女王)。我试图通过再逐行和将它们放置在斑点基地起飞那个位置的皇后其余地方上面和对角线元素不增加1在棋盘上安排皇后

#include<stdlib.h> 
    #include<stdio.h> 

    #define dim 8 


    int main(void) 
    { 
     int chess[dim] [dim] = {{0, 0, 0, 0, 0, 0, 0, 0}, 
         {0, 0, 0, 0, 0, 0, 0, 0}, 
         {0, 0, 0, 0, 0, 0, 0, 0}, 
         {0, 0, 0, 0, 0, 0, 0, 0}, 
         {0, 0, 0, 0, 0, 0, 0, 0}, 
         {0, 0, 0, 0, 0, 0, 0, 0}, 
         {0, 0, 0, 0, 0, 0, 0, 0}, 
         {0, 0, 0, 0, 0, 0, 0, 0}}, i, j, *piece, vert_sum, diag_sum; 

piece = &chess[0] [(rand() %8) + 1]; 
*piece = 1; 

vert_sum = vert_sum + chess[i--] [j]; 
diag_sum = diag_sum + chess[i--] [j--]; 

for(i=1; i<8; i++) 
{ 
    piece = &chess[i] [j=0]; 
    while(vert_sum == 1 || diag_sum == 1) 
     { 
      j++; 

     } 
    if(vert_sum != 1 && diag_sum != 1) 
     { 

      *piece = 1; 
     } 
} 

for(i=0; i<8; i++) 
{ 
    for(j=0; j<8; j++) 
    { 
     printf("%d ", chess[i] [j]); 
     if(j==7) 
     { 
      printf("\n"); 
     } 
    } 
} 

}

几乎一切从vert_sum = vert_sum + ....到if(vert_sum!= 1 & & diag_sum!= 1){* piece = 1;}是随机废话我一直在尝试。任何帮助我感冒的事情将不胜感激。

回答

1

这是一个可以使用回溯解决的经典问题。您可以查找伪代码。

wiki

0

谷歌“回溯”,这是解决问题的传统方式。提出的代码有很长的路要走。