主题:[讨论]八皇后小问题
#include<iostream>
#include<iomanip>
#define EIGHT 8
#define TRUE 1
#define FALSE 0
using namespace std;
int queen[EIGHT];//存放8个皇后位置
int number=0;//计算解的总数
int attack(int ,int );
void print_table()//输出解
{
int x=0,y=0;
number+=1;
cout<<endl;
cout<<"八皇后的第"<<setw(2)<<number<<"组解"<<endl<<"\t";
for(x=0;x<EIGHT;x++)
{
for(y=0;y<EIGHT;y++)
if(x==queen[y])
cout<<"<q>";
else
cout<<"<->";
cout<<endl<<"\t";
}
system("pause");
}
void decide_position(int value)
{
int i=0;
while(i<EIGHT)
{
if(attack(i,value)!=1)//判断是否受到攻击
{
queen[value]=i;
if(value==7)
print_table();
else
decide_position(value+1);
}
i++;
}
}
int attack(int row,int col)
{
int i=0,atk=FALSE;
int offset_row=0,offset_col=0;
while((atk!=1) && i<col)
{
offset_row=abs(i-col);
offset_col=abs(queen[i]-row);//判断皇后位置
if(queen[i]==row || offset_row==offset_col)//判断位置时应该是行,列,对角线,但这里少么了
atk=TRUE; //一个,是不是程序的思想与我想的不一样啊
i++; //我还是不懂啊。。求指教
}
return atk;
}
int main()
{
decide_position(0);
return 0;
}
这是关于八皇后的完整代码。。。我刚学,也存在了一点问题想请教。[em4][em4]
#include<iomanip>
#define EIGHT 8
#define TRUE 1
#define FALSE 0
using namespace std;
int queen[EIGHT];//存放8个皇后位置
int number=0;//计算解的总数
int attack(int ,int );
void print_table()//输出解
{
int x=0,y=0;
number+=1;
cout<<endl;
cout<<"八皇后的第"<<setw(2)<<number<<"组解"<<endl<<"\t";
for(x=0;x<EIGHT;x++)
{
for(y=0;y<EIGHT;y++)
if(x==queen[y])
cout<<"<q>";
else
cout<<"<->";
cout<<endl<<"\t";
}
system("pause");
}
void decide_position(int value)
{
int i=0;
while(i<EIGHT)
{
if(attack(i,value)!=1)//判断是否受到攻击
{
queen[value]=i;
if(value==7)
print_table();
else
decide_position(value+1);
}
i++;
}
}
int attack(int row,int col)
{
int i=0,atk=FALSE;
int offset_row=0,offset_col=0;
while((atk!=1) && i<col)
{
offset_row=abs(i-col);
offset_col=abs(queen[i]-row);//判断皇后位置
if(queen[i]==row || offset_row==offset_col)//判断位置时应该是行,列,对角线,但这里少么了
atk=TRUE; //一个,是不是程序的思想与我想的不一样啊
i++; //我还是不懂啊。。求指教
}
return atk;
}
int main()
{
decide_position(0);
return 0;
}
这是关于八皇后的完整代码。。。我刚学,也存在了一点问题想请教。[em4][em4]