我一直在試圖調試我編寫的代碼,它只在數組的第一行輸出1,而其他所有元素都是零(從第二行到最後一個元素),是不是問題函數調用通過值或別的東西傳遞數組。幫助讚賞。8Queen代碼不起作用
#include<stdio.h>
#include<stdlib.h>
int isSafe(int x, int y, int a[][8])
{ int i,j;
//for left check of the cols
for(i=0;i<y;i++)
{
if(a[x][i]==1)
return 0;
}
//for check of left upper diagonals
for (i = x, j = y; i >= 0 && j >= 0; i--, j--)
{
if(a[i][j]==1)
return 0;
}
//for check of left lower diagonals
for(i = x, j = y; i<=7 && j>=0; i++,j--)
{
if(a[i][j]==1)
return 0;
}
return 1;
}//close isSafe
int EQueen(int a[][8], int q)
{
int c=0;
if(q==8)
return 1;
else
{
while(c<=7)
{
if(isSafe(q,c,a)==1)
{
a[c][q] = 1;
if(EQueen(a,q+1)==1)
return 1;
else
a[c][q] = 0;
}//close if
c++;
}//close while
return 0;
}//close else
}//close EQueen
int main()
{
int i,j,chess[8][8] = {[0 ... 7][0 ... 7] = 0};
if(EQueen(chess,0)==1)
{
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
printf("%d ",chess[i][j]);
printf("\n");
}
}
return 0;
}//close main
如果我改變了語句[C] [Q]對[Q] [C ]並且保持函數調用相同,它將每行的第一個元素輸出爲1.雖然我想的方式是正確的。現在缺乏的地方在哪裏? – Sahir
明白了,我並沒有檢查isSafe中女王範圍內的所有8個位置。 – Sahir