八皇后非递归算法c语言,要求;编写实现八皇后问题的递归解法或非递归解法,对于任意给定的一? 爱问知识人...
將下面程序改成運(yùn)行后需要輸入起始位置(第N行第M列)然后輸出結(jié)果。
#include
#include
enum Status {TRUE,FALSE}; //枚舉狀態(tài)
int matrix[
將下面程序改成運(yùn)行后需要輸入起始位置(第N行第M列)然后輸出結(jié)果。
#include
#include
enum Status {TRUE,FALSE}; //枚舉狀態(tài)
int matrix[8][8]; //2位矩陣
int a[8],b[15],c[15]; //按行設(shè)置標(biāo)志位
int count; //統(tǒng)計(jì)個數(shù)
//初始化函數(shù)
void init()
{
for(int i=0;i<8;i++){
for(int j=0;j<8;j++)
matrix[i][j]=0; //矩陣置0
a[i]=-1; //標(biāo)志位置-1
}
for(i=0;i<15;i++)
b[i]=c[i]=0; //標(biāo)志位置0
count=0; //統(tǒng)計(jì)個數(shù)置0
}
//矩陣輸出
void show(){
printf("\n");
for(int i=0;i<8;i++){
for(int j=0;j<8;j++)
printf("%d ",matrix[i][j]);
printf("\n");
}
}
//判斷是否可以放置,TRUE可以;FALSE不可以
Status isAvailable(int row,int column){
if(a[column]!=-1||b[row+column]==1||c[7-(column-row)]==1)//當(dāng)前列被放置,或者該列所在的行和所在列存在放置,不可以放置
return FALSE;
for(int i=0;i<8;i++)
if(a[i]==row) //當(dāng)前列為行號,不可以放置
return FALSE;
return TRUE;
}
//重置矩陣所在行和列,進(jìn)行局部清零
void reset(int row,int column){
matrix[row][column]=b[row+column]=c[7-(column-row)]=0;
a[column]=-1;
}
//如果可以放置,置所在的坐標(biāo)位置為1
void set(int row,int column){
matrix[row][column]=b[row+column]=c[7-(column-row)]=1;
a[column]=row;
}
//對當(dāng)前行的各個列進(jìn)行遞歸調(diào)用,尋找放置位置
void recurse(int row,int column){
int nextcolumn=column+1;
for(int i=0;i<8;i++){
if(isAvailable(i,nextcolumn)==TRUE){//如果能放置
set(i,nextcolumn); //置1代表放置成功
if(nextcolumn==7){
show();
count++;
}
recurse(i,nextcolumn);
reset(i,nextcolumn);
}
}
}
int main(){
init();
for(int i=6;i<7;i++){
// matrix[row][column]=b[row+column]=c[7-(column-row)]=1;
matrix[5][6]=b[5+6]=c[7-(6-5)]=1;
if(isAvailable(i,0)==TRUE){
set(i,0);
recurse(i,0);
reset(i,0);
}
}
printf("\n一共有%d個解\n",count);
return 0;
}
展開
全部
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的八皇后非递归算法c语言,要求;编写实现八皇后问题的递归解法或非递归解法,对于任意给定的一? 爱问知识人...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery中选择器有哪几种
- 下一篇: 1595元 零刻SER5 Pro迷你主机