留着备用。

题目描述和代码参考:https://www.geeksforgeeks.org/8-queen-problem/

NQueenProblem(js代码):

class NQueenProblem {
static printSolution(board, numOfSolutions) {
console.log(`第${numOfSolutions}种解法:`);
for (let i = 0; i != board.length; ++i) {
let temp = "";
for (let j = 0; j != board.length; ++j) {
temp += board[i][j] + " ";
}
console.log(temp);
}
} static solve(num) {
let numOfSolutions = 0;
let board = CommonUtil.zeros(num, num); let isSafe = function(col, row) {
// 检查该行左边有没皇后
for (let i = 0; i != col; ++i) {
if (board[i][row] == 1) return false;
}
// 检查左上角
for (let i = col - 1, j = row - 1; i >= 0 && j >= 0; --i, --j) {
if (board[i][j] == 1) return false;
}
// 检查左下角
for (let i = col - 1, j = row + 1; i >= 0 && j < num; --i, ++j) {
if (board[i][j] == 1) return false;
}
return true;
}; let placeNextQueen = function(col) {
// 如果所有皇后都放置好了,说明找到了一种方案
if (col >= num) {
NQueenProblem.printSolution(board, ++numOfSolutions);
return;
} // 在可以放的地方试探
for (let i = 0; i != num; ++i) {
if (isSafe(col, i)) {
board[col][i] = 1;
placeNextQueen(col + 1);
board[col][i] = 0;
}
}
}; placeNextQueen(0);
} static run(data) {
NQueenProblem.solve(Number(data));
// Number(data)指的是皇后的数量
}
}

/

mColoringProblem(js代码):

class mColoringProblem {
static printSolution(colorOfPoint, numOfSolutions) {
console.log(`第${numOfSolutions}种解法:`);
console.log(colorOfPoint);
// 例如输出[1, 2, 3, 4, 1],表示第1个点第1种颜色,
// 表示第2个点第2种颜色,表示第3个点第3种颜色,
// 表示第4个点第4种颜色,表示第5个点第1种颜色,
} static solve(graph, m) {
let numOfSolutions = 0;
let colorOfPoint = graph.map(() => 0); // 存储每个点的着色情况 let isSafe = function(pointId, colorId) {
// 检查会不会和相邻的已着色点冲突
for (let i = 0; i != pointId; ++i) {
if (graph[pointId][i] == 1 && colorId == colorOfPoint[i]) {
return false;
}
}
return true;
}; let coloringNext = function(pointId) {
// 如果所有点都已经着色,说明找到了一种方案
if (pointId >= graph.length) {
mColoringProblem.printSolution(colorOfPoint, ++numOfSolutions);
return;
} // 尝试着色
for (let i = 1; i <= m; ++i) {
if (isSafe(pointId, i)) {
colorOfPoint[pointId] = i;
coloringNext(pointId + 1);
colorOfPoint[pointId] = 0;
}
}
}; coloringNext(0);
} static run(data) {
// 输入格式:首个数字表示着色点个数
// 之后是一个描述无向图的邻接矩阵,
// 最后是颜色数量
data = CommonUtil.handleData(data);
let num = data[0];
let graph = CommonUtil.zeros(num, num);
let k = 0;
for (let i = 0; i != num; ++i) {
for (let j = 0; j != num; ++j) {
graph[i][j] = data[++k];
}
}
let m = data[k + 1]; // console.log(num, graph, m);
mColoringProblem.solve(graph, m);
}
}

算法笔记 #007# Backtracking的更多相关文章

  1. 学习Java 以及对几大基本排序算法(对算法笔记书的研究)的一些学习总结(Java对算法的实现持续更新中)

    Java排序一,冒泡排序! 刚刚开始学习Java,但是比较有兴趣研究算法.最近看了一本算法笔记,刚开始只是打算随便看看,但是发现这本书非常不错,尤其是对排序算法,以及哈希函数的一些解释,让我非常的感兴 ...

  2. 算法笔记--数位dp

    算法笔记 这个博客写的不错:http://blog.csdn.net/wust_zzwh/article/details/52100392 数位dp的精髓是不同情况下sta变量的设置. 模板: ]; ...

  3. 算法笔记--lca倍增算法

    算法笔记 模板: vector<int>g[N]; vector<int>edge[N]; ][N]; int deep[N]; int h[N]; void dfs(int ...

  4. 算法笔记--STL中的各种遍历及查找(待增)

    算法笔记 map: map<string,int> m; map<string,int>::iterator it;//auto it it = m.begin(); whil ...

  5. 算法笔记--priority_queue

    算法笔记 priority_queue<int>que;//默认大顶堆 或者写作:priority_queue<int,vector<int>,less<int&g ...

  6. 算法笔记--sg函数详解及其模板

    算法笔记 参考资料:https://wenku.baidu.com/view/25540742a8956bec0975e3a8.html sg函数大神详解:http://blog.csdn.net/l ...

  7. 算法笔记——C/C++语言基础篇(已完结)

    开始系统学习算法,希望自己能够坚持下去,期间会把常用到的算法写进此博客,便于以后复习,同时希望能够给初学者提供一定的帮助,手敲难免存在错误,欢迎评论指正,共同学习.博客也可能会引用别人写的代码,如有引 ...

  8. 算法笔记_067:蓝桥杯练习 算法训练 安慰奶牛(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是 ...

  9. 算法笔记(c++)--回文

    算法笔记(c++)--回文 #include<iostream> #include<algorithm> #include<vector> using namesp ...

随机推荐

  1. Python才排第8名!2018增速最快TOP 10编程语言盘点

    在技术前沿的硅谷,开发者们不仅要学习多种热门的编程语言,还要时时盯着新的编程语言的崛起,生怕自己掉队. 作为世界最大开源软件社区,Github每年都会发布年度Octoverse报告,向大家展示年度最流 ...

  2. Junit + String/Integer/ArrayList/HashMap/TreeMap 基本使用Demo

    package JavaTest.test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; ...

  3. maven 详解二

    转自 http://www.cnblogs.com/whgk/p/7121336.html 前一节我们明白了maven是个什么玩意,这一节就来讲讲他的一个重要的应用场景,也就是通过maven将一个ss ...

  4. Hadoop2.6的DataNode启动不了

    2016-05-04 18:14:51,990 INFO org.apache.hadoop.ipc.Server: IPC Server Responder: starting 2016-05-04 ...

  5. js判断当前页面是否有父页面,页面部分跳转解决办法,子页面跳转父页面不跳转解决 (原)

    //如果当前页面存在父页面,则当前页面的父页面重新加载(即子页面父页面连带跳转) if(top.location!=self.location){         window.parent.loca ...

  6. 例子:动能并不是特别强(2-3)后,下M5的同时,也是恢复期到期的前一天

    动能并不是特别强(2-3)后,下M5的同时,但是恢复期到期 EG.002195 2017/06/23-->2017/06/29

  7. windows Server2012 IIS8.0配置安装完整教程

    IIS8.0是windows Server2012自带的服务器管理系统,和以往不同,IIS8.0安装和操作都比较简单,界面很简洁,安装也很迅速.今天我们重点完整的演示下Internet Informa ...

  8. [6]传奇3服务器源码分析一GameGate

    1. 2. 留存 服务端下载地址: 点击这里

  9. <<Natural Language Inference over Interaction Space >> 句子匹配

    模型结构 code :https://github.com/YichenGong/Densely-Interactive-Inference-Network 首先是模型图: Embedding Lay ...

  10. Rpgmakermv(31)MOG插件与YEP的结合

    问题简述: 因为我在开发时使用了gamequestsystem(任务插件),所以必须使用YEP_mainmenumanager; 此时,我又想加个MOG_Picture插件(图片收集插件): 当他们在 ...