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

请教JAVA大神,八皇后问题代码

发布网友 发布时间:2024-03-08 02:11

我来回答

2个回答

热心网友 时间:2024-08-19 17:15

public class Queen{
//同栏是否有皇后,1表示有
privateint[]column;
 
//右上至左下是否有皇后
privateint[]rup;
 
//左上至右下是否有皇后
privateint[]lup;
 
//解答
privateint[]queen;
 
//解答编号
private int num;
 
public Queen(){
column=newint[8+1];
rup=newint[(2*8)+1];
lup=newint[(2*8)+1];
 
for(inti=1;i<=8;i++)
column[i]=1;
 
for(inti=1;i<=(2*8);i++)
rup[i]=lup[i]=1;
 
queen=newint[8+1];
}
 
public void backtrack(inti){
if(i>8){
showAnswer();
}else{
for(intj=1;j<=8;j++){
if((column[j]==1)&&(rup[i+j]==1)&&
(lup[i-j+8]==1)){
queen[i]=j;
//设定为占用
column[j]=rup[i+j]=lup[i-j+8]=0;
backtrack(i+1);
column[j]=rup[i+j]=lup[i-j+8]=1;
}
}
}
}
 
protected void showAnswer(){
num++;
System.out.println("\n解答"+num);
 
for(inty=1;y<=8;y++){
for(intx=1;x<=8;x++){
if(queen[y]==x){
System.out.print("Q");
}else{
System.out.print(".");
}
}
 
System.out.println();
}
}
 
public static void main(String[]args){
Queen queen= new Queen();
queen.backtrack(1);
}
}

热心网友 时间:2024-08-19 17:14

#include <iostream>
#include <math.h>
#include <malloc.h>

using namespace std;

int *position; //放置的位置
int queen; //皇后数目
int count; //第N种可能性

//判断第n行是否放置皇后
bool SignPoint(int n)
{
for (int i=0;i<n;i++)
{
   if (position[i] == position[n]) //该列已经放置过皇后了
    return false;
  if (abs(position[i] - position[n]) == n-i) //对角线已经放置过了
    return false;
}
return true;
}

//设置皇后
void SetQueen(int n=0)
{
if (queen==n)
{
   //该处可以改成自己想要的显示方式
   printf("NO.%d: ",++count);
   printf("\n");
   for (int i=0;i<queen;i++)
   {
    for (int j=0;j<queen;j++)
    {
     if (j == position[i])
     {
      printf("* ");
     }
     else
     {
      printf("0 ");
     }
    }
    printf("\n");
   }
   printf("\n");
   return;
}
else
{
   for (int i=0;i<queen;i++)
   {
    position[n] = i;

    if(SignPoint(n))//如果该位置放置皇后正确的话,则到下一行
    {
     SetQueen(n+1);
    }
   }
}
}

int main(int argc, char argv[])
{
cout<<"请输入皇后的总数:"<<endl;
cin>>queen;
position = (int*)malloc(queen*sizeof(int));
SetQueen();
cout<<"摆放完毕"<<endl;
cin.get();
cin.get();
return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电视般有哪些尺寸 电视有哪些尺寸 寓意生命力顽强的男孩名字 美国产生金融危机了,铁矿石回降价吗? 铁矿石什么情况下会跌 从生物学的角度看,随地吐痰的主要危害是什么 随地吐痰会给我们带来什么样的危害? 痰是怎样形成的,随地吐痰有哪些危害 得力挂钟为什么不走了 人民大学、外交学院、中国政法、北京大学、复旦、华东政法等大学法学... 小刚改掉了不好的缺点 鄂州仁健医院治乙肝怎么样 不知道鄂州仁健医院怎样?收费贵不贵啊? 自驾长途车必备食物有哪些? 家里剩下点人吃的钙片可以给狗子吃吗? 遇到黄鼠狼意味着什么 璐比玛斯小韩总叫什么 人在什么情况下会有想要去死的可能 ...有皇帝强肾方,说是纯中药,可以治好前列腺炎,早泄,我找他,她说先交2... 鄂州治疗尿频尿急? 人到了绝望的时候会死吗? ...Audition怎样把几个音乐连接在一起?求详细操作步骤 合肥工业大学研究生考研录取分数线是多少? 2015年熊猫纪念币银10元,花多少钱买滴 ...号在最近24小时内绑定过三个,已达到限制,...24小时后可以再次... 有一个医生,微信和QQ名字都是中医养生堂,专门治疗男士阳痿早泄的。 阿尔托的冒险有几个地图 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 翡翠带钩有哪些历史起源,如何评价翡翠带钩的价值? 是QQtang1515推销治疗男性疾病的医生田诗雅是真的吗? 人的钙片能不能给狗吃 JAVA中的变成求解8皇后问题 李凉改掉了不好的缺点用修改符号修改病句 八皇后算法是什么难度 ...与直接把原照片的长和宽都按比例压缩,有何区别? 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 幽谷形容女人什么 ...今天给我打了核实个人信息电话,要多久能下卡 ...号在最近24小时内绑定过三个,已达到限制,...24小时后可以再次... 社保是挂名在公司的。生宝宝后可以拿生育津贴吗? 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 挂名在其他公司交社保,生育保险公司给报销么 主孔净跨是什么意思 中秋节出生的孩子取什么名字好最好听的名字推荐 中秋节出生的宝宝名字牛年宝宝乳名男女通用 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 二个人的联名卡申请可以添加多一人吗