gpt4 book ai didi

c - C 中修改后的 N 皇后区

转载 作者:太空宇宙 更新时间:2023-11-04 03:34:11 26 4
gpt4 key购买 nike

我正在尝试将 N-Queen 拼图求解器修改为 N-Empress 求解器(棋子可以像车和马一样移动)

代码以一种不会相互威胁的方式放置(或至少试图放置)大臣。并回溯打印所有可能的解决方案。但是,我无法让它输出正确数量的解决方案。当前它输出的是正确的,但它并没有输出所有的。不确定我缺少什么条件。

#include<stdio.h>
#include<math.h>
/*
N=4:8 Solutions
N=5:20 Solutions
N=8:2766 Solutions
*/
int board[20],count;

int main()
{
int n,i,j,numPuzzle;
void queen(int row,int n);
printf("Enter Number of Queens:");
scanf("%d", &n);
queen(1,n);
return 0;
}

//function for printing the solution
void print(int n)
{
int i,j;
printf("\n\nSolution %d:\n\n",++count);

for(i=1;i<=n;++i)
printf("\t%d",i);

for(i=1;i<=n;++i)
{
printf("\n\n%d",i);
for(j=1;j<=n;++j) //for nxn board
{
if(board[i]==j)
printf("\tQ"); //queen at i,j position
else
printf("\t-"); //empty slot
}
}
}

/*funtion to check conflicts
If no conflict for desired postion returns 1 otherwise returns 0*/
int place(int row,int column)
{
int i;
for(i=1;i<=row-1;++i)
{
//checking column and digonal conflicts
//printf("\nboard[i]=%d column=%d\n",board[i],column);

if(board[i]==column)
{
return 0;
}

if( (abs(board[i]-(column+3))==abs(i-row)) )
{
return 0;
}

if( (abs(board[i]-(column-3))==abs(i-row)) )
{
return 0;
}

if( (abs(board[i]+(column-3))==abs(i-row)) )
{
return 0;
}

if( (abs(board[i]+(column+3))==abs(i-row)) )
{
return 0;
}


}
return 1; //no conflicts
}

//function to check for proper positioning of queen
void queen(int row,int n)
{
int column;

for(column=1;column<=n;++column)
{
if(place(row,column))
{
board[row]=column; //no conflicts so place queen
if(row==n) //dead end
print(n); //printing the board configuration
else //try queen with next position
queen(row+1,n);
}
}
}

最佳答案

place 方法似乎并没有涵盖所有情况。在马步中,列差和行差之和为3。

int place(int row,int column)
{
int i;
for(i=1;i<=row-1;++i)
{
//checking column and digonal conflicts
//printf("\nboard[i]=%d column=%d\n",board[i],column);

if(board[i]==column)
{
return 0;
}

if(abs(board[i]-column)+abs(row-i)==3 )
{
return 0;
}
}
return 1; //no conflicts
}

关于c - C 中修改后的 N 皇后区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33888880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com