📄 001.cpp
字号:
#include <iostream.h>
#define N 10
//变量与函数声明
int queens_number=N;
int place[N]; //place[i]:第i行第place[i]列
int top = 0;
int pop(); //弹出函数
void push(int j); //压入函数
int judge(int i,int j); //冲突测试
void queens(int i,int j); //试放过程
void print(); //打印过程
//主控过程
void main() {
cout<<"本程序找10皇后的一个解,使用了堆栈,效率很差"<<endl;
queens(0,0); /*从0 行0列开始试放*/
print();
char cc;cout<<"请退出.."<<endl;cin>>cc;
}
//过程与函数定义
int pop() { //弹出函数
return place[--top];
}
void push(int j) { //压入函数
place[top++]=j;
}
int judge(int i,int j){ //冲突测试
if(j>(queens_number-1))return 0;
for(int k =i-1;k>=0;k--){ //测试与前几行位置是否冲突
if(j==place[k]) return 0;
if(i-k==place[k]-j)return 0;
if(i-k==j-place[k]) return 0;
}
return 1;
}
void queens(int i,int j){ //试放过程
if(i>(queens_number-1))return; //递归终止
if(judge(i,j)==0) //有冲突
if(j>=(queens_number-1)) { //某行最后一列测试失败
j=pop( ); //弹出前一行的列位置
queens(i=top,++j); //试放前一行的下一列
}
else //不在最后一列
queens(i,++j); //试放本行下一列位置
else{ //测试成功
push(j); //压栈
queens(i=top,0); //试放下一行0列位置
}
}
void print() { //打印过程
for(int i=0;i<N;i++)cout<<place[i]<<' ';
cout<<endl;
//cout<<"行---列\n";
//do{cout<<top<<"----"<<pop()<<endl;}while(top);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -