问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言八皇后

发布网友 发布时间:2023-04-09 21:44

我来回答

2个回答

热心网友 时间:2023-10-03 18:45

这是经典题目,答案网上有的是,抄一个学学就可以了:
回溯法进行求解,程序实现如下:
#include<stdio.h>
#define Queens 8 //定义结果数组的大小,也就是皇后的数目
int a[Queens+1]; //八皇后问题的皇后所在的行列位置,从1开始算起,所以加1
int main(){
int i, k, flag, not_finish=1, count=0;
//正在处理的元素下标,表示前i-1个元素已符合要求,正在处理第i个元素
i=1;
a[1]=1; //为数组的第一个元素赋初值
printf("The possible configuration of 8 queens are:\n");
while(not_finish){ //not_finish=l:处理尚未结束
while(not_finish && i<=Queens){ //处理尚未结束且还没处理到第Queens个元素
for(flag=1,k=1; flag && k<i; k++) //判断是否有多个皇后在同一行
if(a[k]==a[i])
flag=0;
for (k=1; flag&&k<i; k++) //判断是否有多个皇后在同一对角线
if( (a[i]==a[k]-(k-i)) || (a[i]==a[k]+(k-i)) )
flag=0;
if(!flag){ //若存在矛盾不满足要求,需要重新设置第i个元素
if(a[i]==a[i-1]){ //若a[i]的值已经经过一圈追上a[i-1]的值
i--; //退回一步,重新试探处理前一个元素
if(i>1 && a[i]==Queens)
a[i]=1; //当a[i]为Queens时将a[i]的值置1
else
if(i==1 && a[i]==Queens)
not_finish=0; //当第一位的值达到Queens时结束
else
a[i]++; //将a[il的值取下一个值
}else if(a[i] == Queens)
a[i]=1;
else
a[i]++; //将a[i]的值取下一个值
}else if(++i<=Queens)
if(a[i-1] == Queens )
a[i]=1; //若前一个元素的值为Queens则a[i]=l
else
a[i] = a[i-1]+1; //否则元素的值为前一个元素的下一个值
}
if(not_finish){
++count;
printf((count-1)%3 ? "\t[%2d]:" : "\n[%2d]:", count);
for(k=1; k<=Queens; k++) //输出结果
printf(" %d", a[k]);
if(a[Queens-1]<Queens )
a[Queens-1]++; //修改倒数第二位的值
else
a[Queens-1]=1;
i=Queens -1; //开始寻找下一个满足条件的解
}
}

热心网友 时间:2023-10-03 18:45

#include "stdio.h"
int count;
int queen [10], column[20],left[20],right[20];
void prt1()
{ int j;
printf("No.%d ",++count);
for (j=1;j<=8;j++) printf("%3d",queen[j]);
printf("\n");
}
void try(int i)
{int j;
for (j=1;j<=8;j++)
if (column[j] && left[i-j+8] && right[i+j])
{ queen[i]=j; column[j]=0;
left[i-j+8]=0; right[i+j]=0;
if (i<8) try(i+1);
else prt1();
column[j]=left[i-j+8]=right[i+j]=1;
}
}
main()
{int i;
for (i=1;i<=16;i++)
column[i]=left[i]=right[i]=1;
count=0; try(1);
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
做青红椒炒毛肚有哪些好吃的诀窍? 如何自制好吃的香辣毛肚? 穿越火线警告码SX(2,509,0)如何解决 CF sx警告码(2,770,0)什么原因 ...要求重新启动电脑 警告码是2 xxxx 0 有时重启4 5次才能玩 win7系统... 穿越火线 sx 警告码 2,994,0 怎么解决 CF出现非法模块SX警告码(2,990,0) 我为什么上CF体验服没开G有非法模块???怎么办啊 警告码(2,502,0) 穿越火线进游戏后 2分钟左右 就出来个 SX 警告码2,990,0 看到刘老师那慈祥的面庞,我感慨万分,我想到了这样几个赞美刘老师的成语... 请问北京哪有实体店并且帮我推荐一款护膝护腰谢谢 打了一段时间篮球,膝盖下面非常疼,是什么原因 遣虱的意思遣虱的意思是什么 130客车什么时候通车了 大荆镇到西安客车什么时候通车 安徽宿州汽车去南京什么时候通车 往年忻州汽车站春节期间什么时候通车 省内沧州到邯郸汽车什么时候通车 呼和浩特长途汽车开往薛家湾什么时候通车呢? 唐河汽车站什么时候通车 尉氏汽车站什么时候通车 银川汽车站什么时候通车? 焦香麦芽是添加剂吗 正宗啤酒配料表 啤酒用糖浆属于食品添加剂吗 信者得爱 粤语版 是郑秀文唱的 有大神有郑秀文-信者得爱的粤语版么 求发youxiang 急。。。 跪求高人找歌名:偶尔听到女生唱的一首粤语歌,其中有一句歌词大概是:奇怪烟花这么花!谢谢 郑秀文 信者得爱 粤语 下载 有地址或者直接有mP3文件给我么? 比较一战中无限制潜艇战与二战中的群狼战术 求八皇后问题C语言源代码!急! c语言编程:八皇后问题 用c语言解决八皇后问题,要求第一个皇后位置用键盘输入,需要详细代码和解释,谢谢、 八皇后问题c++代码,求详解 c语言编写八皇后问题 下载列表中的文件算下载了吗为什么? 哪种软件下载列表文件 苏州ca证书助手怎么下载 怎样把不同版本的迅雷下载软件的列表内容合在一起? 理想one有购置税吗 理想one要交购置税吗? 《重生现世之剑神》txt下载在线阅读全文,求百度网盘云资源 植物大战僵尸年度版(中文) 去除后台修改器 阿水大杯茶奥利奥奶绿热量 喝阿水大杯茶会长胖吗? 阿水蓝色夏威夷热量 阿水大杯茶草莓牛乳热量高吗 6寸12v风扇多少瓦 3D组六 中了三个号码 10注 一倍 多少奖金 3d预测 每晚7点左右发号 加会员每天提供胆码 大底 精选10注组选 准不准大家说了算