编了个八皇后程序,调试时当n=4,i=4运行到****行时ChessLink的值就被改变了
请各位高手帮小弟一把,谢谢咯:)#include <iostream.h>
const int maxqueen=4;
int R[maxqueen+1][maxqueen+1];//当R为0时表示该位置还能放皇后
int temp;
bool Flag;
struct node{
int line,row;
node *last,*next;
};
node *ChessLink,*Head,*NewChess;
void Initialise()
{
for (int x=1;x<=maxqueen;x++)
for (int y=1;y<=maxqueen;y++)
R[x][y]=0;
}
void chess(int n)//在每次计算完重置Chess1时初始化
{
for (int i=1;i<=maxqueen;i++)
{
if (n==1)
Initialise();
if (R[n][i]==0)//占领
{
Flag=true;
node *NewChess=new node;
NewChess->line=n;
NewChess->row=i;
NewChess->next=NULL;
ChessLink->next=NewChess;
NewChess->last=ChessLink;
ChessLink=NewChess;
for (int k=1;k<=maxqueen;k++)
R[k][i]+=maxqueen-n;
for (k=1;k+n<=maxqueen;k++)
{
if (i+k<=maxqueen)
R[n+k][i+k]+=maxqueen-n;
if (i-k>=1)
R[n+k][i-k]+=maxqueen-n;
}
if (n==maxqueen)//计数,初始化
{
temp++;
Initialise();
}
if (n<maxqueen)
{
chess(n+1);
}
}
else if (i==maxqueen)//回溯,在回溯时要注意只改变上一次占领时改变的位置
{
for (int k=1;k<=maxqueen;k++)
R[k][ChessLink->row]-=maxqueen-ChessLink->line;
for (k=1;k<=maxqueen;k++)
{
if ((ChessLink->row+k)<=maxqueen)
R[ChessLink->line+k][ChessLink->row+k]-=(maxqueen-ChessLink->line);
if ((ChessLink->row-k)>=1)
 **** R[ChessLink->line+k][ChessLink->row-k]-=(maxqueen-ChessLink->line);
}
ChessLink=ChessLink->last;
}
}
}
void main()
{
Head=new node;
ChessLink=new node;
Head->next=ChessLink;
temp=0;
chess(1);
cout<<temp<<endl;
}