#include<iostream.h> #include<stdio.h> int line[8],answer=0; void show()//显示摆放的结果. { int i,j; for(i=0;i<8;i++) { for(j=0;j<8;j++) { if(line[i]==j) cout<<"Q"; else cout<<"*"; } cout<<endl; } answer++; cout<<endl; cout<<answer<<endl; getchar(); } int Judge(int t)//判断摆放的位置是否正确,不正确返回1,正确返回0. { int i,n=0; for(i=0;i<t;i++) { if(line[i]==line[t]) {n=1;break;} if(line[i]+i==line[t]+t) {n=1;break;} if(line[i]-i==line[t]-t) {n=1;break;} } return n; } void control(int n)//主要控制函数. { int t=8; for(line[n]=0;line[n]<t;line[n]++) { if(Judge(n)) continue; else if(n!=7) control(n+1); else show(); } } int main()//主函数. { control(0); cout<<answer<<endl; return 0; } 5 运行结果 Q******* ****Q*** *******Q *****Q** **Q***** ******Q* *Q****** ***Q**** 1
时间: 2023-08-02 21:07:27 浏览: 69
#include"iostream.h"
3星 · 编辑精心推荐
这段代码实现了八皇后问题的解法,即在八行、八列的棋盘上放置八个皇后,要求每个皇后所在的行、列、对角线上都不能有其他皇后。其中,control函数用于控制摆放的过程,Judge函数用于判断摆放的位置是否正确,show函数用于显示摆放的结果。
具体来说,control函数采用递归的方式,在每一行中遍历每一个列,判断当前位置是否符合要求。如果符合要求,则继续递归到下一行;如果不符合要求,则回溯到上一行,重新选择列。
Judge函数用于判断当前位置是否符合要求。具体来说,它会遍历之前已经摆放好的皇后,分别判断当前位置是否在同一列、同一主对角线、同一副对角线上。如果在同一列或同一对角线上,则返回1表示不符合要求,否则返回0表示符合要求。
最后,show函数用于显示摆放好的结果,并将答案计数器加1。
在主函数中,调用control函数开始进行摆放,最后输出答案计数器的值,表示总共有多少种不同的摆法。
运行结果中,Q表示皇后所在的位置,*表示空位。第一个结果是一种摆法,答案计数器为1。
阅读全文