博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言实现八皇后一种解
阅读量:2752 次
发布时间:2019-05-13

本文共 1130 字,大约阅读时间需要 3 分钟。

//这段代码不好理解的地方就是,在left和right数组上;
 
//col数组表示皇后所在位置的列是否还有其他的皇后,这个很好理解;
//如果还是有问题可以给我留言,我看到会回复;
#include
int col[8]={0}; //表示列,该列有元素则赋值为1;int left[15]={0}; //表示偏左的斜线,斜线上有元素赋值为1;int right[15]={0}; //表示偏右的斜线,斜线上有元素赋值为1;int Q[8]; //存储每行皇后的位置,下标表示行坐标,所存的元素表示列坐标;void Queen(){ int top=-1,i=0,j=0; //用了栈的top指针性质,没有实质的创建一个栈; while(top!=7) //找到一个皇后top++,直到找到八个皇后结束; { for(;j<8;j++) { if(!col[j]&&!left[i+j]&&!right[7+i-j]) //判断这个位置是否可以放置皇后; { Q[++top]=j; //将当前的列坐标赋给Q[++top],表示皇后已经放好; col[j]=left[i+j]=right[7+i-j]=1; //放置好皇后的位置,该列以及两条斜线不能放置皇后; i++; //进行下一行判断; j=0; //每次都从0开始 判断; break; } } if(j==8) //若j==8(这一行都没有合适的位置)时还没有找到,相当于回溯; { i--; //回溯到上一行; j=Q[top--]; //将top指向的元素赋给j并且top--(取出一个栈顶指针); col[j]=left[i+j]=right[7+i-j]=0; //这一列以及两条斜线清0,表示可以若进入下一行放置皇后不受该列以及链条斜线影响; j++; //将j+1继续寻找这一行可以放置皇后的位置; } }}int main(void){ Queen(); //方法1输出; for(int i=0;i<8;i++) { for(int j=0;j<8;j++) { if(j==Q[i]) printf("Q "); else printf("* "); } printf("\n"); } //方法2输出; printf("\n"); for(i=0;i<8;i++) { printf("第%d行的皇后位置为: %d\n",i,Q[i]); } return 0;}

//结果截屏:

你可能感兴趣的文章
拍案惊奇——软件调试实战训练营暑期特别班(v2.1)
查看>>
过则勿惮改
查看>>
GPU高级调试与优化
查看>>
AI推理和高级优化训练营
查看>>
万般由,何必读书?
查看>>
循环交换与局部性
查看>>
AI推理和高级优化训练营
查看>>
纳秒时代
查看>>
图说2018
查看>>
LINUX平台高级调试和优化(2019庐山站)
查看>>
在调试器里看LINUX内核态栈溢出
查看>>
跑步机上的精彩人生——Linus大神传奇
查看>>
从猫蛇之战再看内核戏CPU
查看>>
从猫蛇之战三看内核戏CPU
查看>>
在调试器里看QQLive捉迷藏
查看>>
雕刻在NT内核中的LINUS故事
查看>>
Docker(六):企业级私有仓库
查看>>
Docker网络代理设置
查看>>
Django基础
查看>>
Django基础之CBV
查看>>