当前位置:网站首页>n皇后求解单一解问题
n皇后求解单一解问题
2022-08-08 21:22:00 【lhf2112】
文章参考了博客http://blog.csdn.net/hackbuteer1/article/details/6657109,该文对n皇后问题进行了详细的阐述,并给出了全部解问题的C的实现
仿照其实现,在此备份求单一解的Java程序。
public class Main {
static final int num = 2; //皇后数量
static final int non = -10000; //代表空棋盘
void Init(int n, int [] chessboard){ //棋盘的初始化
for (int i=0;i<n;i++){
chessboard[i] = non;
}
}//Init
boolean NoClash (int row, int col,int[] chessboard){ //判断皇后是否产生冲突,没有冲突返回true
for(int i=0;i<num;i++){
if(chessboard[i] == col|| Math.abs(i-row)==Math.abs(chessboard[i]-col)){
return false;
}
}
return true;
}//Clash
void print(int[] chessboard){
for(int i=0;i<num;i++){
System.out.print(chessboard[i]+" ");
}
}
public static void main(String[] args) {
int n = num;
int flag = 0; //flag 代表解的个数
int [] chessboard = new int[n];
Main m = new Main();
m.Init(n,chessboard);
int i=0,j=0; //i进行行扫描,j进行列扫描
while(i<n){
while(j<n){
if(m.NoClash(i, j, chessboard)){ //位置i,j可以放一个皇后
chessboard[i] = j; //在i行j列放一个皇后
j = 0; //下一行从第0列开始放置皇后
break;
}//if
else{
j++; //在j+1列进行尝试
}//else
}//while(j<n)
if(chessboard[i] == non){ //第i行没能找到解
if(i == 0) //i是第一行了,说明没有解了
break;
else{ //否则要进行回溯
i--; //上一行
j = chessboard[i]+1; //j从上一行的原位置+1开始搜索
chessboard[i] = non; //清空第i行棋盘
continue;
}//else
}//if
if(i==num -1){ //在最后的一行找到了位置,即找到了解
m.print(chessboard);
flag++;
break;
}//if
i++;
}//while(i<n)
if(flag == 0){
System.out.println("无解");
}
}//main
}
边栏推荐
猜你喜欢
What can a reverse proxy server do?
MySQL无法启用/etc/my.cnf配置文件,重启报错Warning: World-writable config file ‘/etc/my.cnf’ is ignored的解决方法
数据库week01
Oxylabs Webinar: Web Scraping Solutions in Action
零数科技受邀出席2019全球未来出行大会
分布式文件存储——分块上传和断点续传
零数科技向海南省委书记汇报数字金融创新
6万人砍不下来一部拼多多手机,背后原来是这个原因。
LiveVideoStackCon 2022 上海站明日开幕!
数据科学竞赛:递增特征构建的简单实现
随机推荐
分别用BeautifulSoup和scrapy爬取某一城市天气预报
数据库week01
TS入门基础
微信小程序小说云开发免费源码
C + +环境设置
中国石油大学(北京)-《 修井工程》第一阶段在线作业
01背包问题,简易AC代码加详细讲解,地宫寻宝,波动数列等DP问题。
快速实现分列转到行(SQL版)一个问题,三种解法!
零数科技向海南省委书记汇报数字金融创新
1个不为人知的 Jupyter notebook 使用技巧,今天分享出来。
浦东AI时代 | 零数科技完成重点项目签约
用固态U盘让你的办公环境随身移动
ZERO Technology "Chain on the South"——deeply cultivated in the field of digital finance
Excel摸鱼技巧:快速实现分列转到行
第七章 类与对象
用固态U盘让你的办公环境随身移动
CrossFormer:A Versatile Vision Transformer Based on Cross-Scale Transformer论文以及代码解析
What is the cURL?
关于广播实现强制下线
H5 移动端调取手机相机或相册