- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在研究一个小问题,该问题将输出访问所有节点并返回起始节点的所有可能组合。
我的数组中有三个节点["a", "b", "c"]
所有可能的路线是
pairs = [ [ 'a', 'b' ],
[ 'a', 'c' ],
[ 'b', 'a' ],
[ 'b', 'c' ],
[ 'c', 'a' ],
[ 'c', 'b' ] ];
我生成路由的函数是(__
用于下划线库)
routesRecursive = function(pairs, currentNode, origin, result) {
__.each(pairs, function(pair) {
if (currentNode === __.first(pair)) {
var currentRoute = pair;
var nextNode = __.last(currentRoute);
if (nextNode === origin) {
result.push(pair);
} else {
result.push(currentRoute);
routesRecursive(__.without(pairs, currentRoute), nextNode, origin, result);
}
}
});
return result;
}
routesRecursive(pairs, "a", "a", [])
期望的输出是:
[
[["a", "b"], ["b", "a"]],
[["a", "b"], ["b", "c"], ["c", "a"]],
[["a", "b"], ["b", "c"], ["c", "b"], ["b", "a"]],
[["a", "c"], ["c", "a"]],
[["a", "c"], ["c", "b"], ["b", "a"]],
[["a", "c"], ["c", "b"], ["b", "c"], ["c", "a"]]
]
我的函数似乎无法产生所需的结果,有人有什么建议吗?
谢谢!
最佳答案
试试这个:
function paths({ graph = [], from, to }, path = []) {
const linkedNodes = memoize(nodes.bind(null, graph));
return explore(from, to);
function explore(currNode, to, paths = []) {
path.push(currNode);
for (let linkedNode of linkedNodes(currNode)) {
if (linkedNode === to) {
let result = path.slice(); // copy values
result.push(to);
paths.push(result);
continue;
}
// do not re-explore edges
if (!hasEdgeBeenFollowedInPath({
edge: {
from: currNode,
to: linkedNode
},
path
})) {
explore(linkedNode, to, paths);
}
}
path.pop(); // sub-graph fully explored
return paths;
}
}
/**
* Get all nodes linked
* to from `node`.
*/
function nodes(graph, node) {
return graph.reduce((p, c) => {
(c[0] === node) && p.push(c[1]);
return p;
}, []);
}
/**
* Has an edge been followed
* in the given path?
*/
function hasEdgeBeenFollowedInPath({ edge, path }) {
var indices = allIndices(path, edge.from);
return indices.some(i => path[i + 1] === edge.to);
}
/**
* Utility to get all indices of
* values matching `val` in `arr`.
*/
function allIndices(arr, val) {
var indices = [],
i;
for (i = 0; i < arr.length; i++) {
if (arr[i] === val) {
indices.push(i);
}
}
return indices;
}
/**
* Avoids recalculating linked
* nodes.
*/
function memoize(fn) {
const cache = new Map();
return function() {
var key = JSON.stringify(arguments);
var cached = cache.get(key);
if (cached) {
return cached;
}
cached = fn.apply(this, arguments)
cache.set(key, cached);
return cached;;
};
}
const graph = [
['a', 'b'],
['a', 'c'],
['b', 'a'],
['b', 'c'],
['c', 'a'],
['c', 'b']
];
document.write(JSON.stringify(paths({
graph,
from: 'a',
to: 'a'
})));
关于javascript - 给定某些节点的所有可能路线,返回起始节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36522845/
我在尝试生成具有“价格”轴和“量”轴的图表时遇到问题,类似于 example given 中的图表。在 Highstock 网站上。它可以很好地显示成交量轴,但不能显示价格。 在尝试确定问题的原因时,
起始 - HTML
在我的 HTML 项目中,我试图提及 标签。但是,VS Code 将其解释为实际的 标签,它会导致奇怪的事情发生。有人有办法解决这个问题吗?预先感谢您! 最佳答案 使用<代替 . 顺便说一下,使
起始 - HTML
在我的 HTML 项目中,我试图提及 标签。但是,VS Code 将其解释为实际的 标签,它会导致奇怪的事情发生。有人有办法解决这个问题吗?预先感谢您! 最佳答案 使用<代替 . 顺便说一下,使
The allocation function attempts to allocate the requested amount of storage. If it is successful, i
这是我的Program.cs: public static void Main(string[] args) { var host = new WebHostBuilder()
我希望我的应用程序独立于操作系统。因此,我的 config.properties 和日志文件存储在资源文件夹中,我通过相对路径获取这些资源。这是我的项目结构。 这是我的 AppConfig 类: pu
(前言:这是我在 Stack Overflow 上提出的第一个与音频相关的问题,因此我会尽力用最好的措辞来表达。欢迎编辑。) 我正在创建一个允许用户循环播放音乐的应用程序。目前,我们的原型(proto
我有一个 Pandas DataFrame,我想将其用作 Scrapy Start URL,函数 get_links 打开一个到 DataFrame 的 xlsx,其中有一个我想在其上运行蜘蛛的 Co
我有几个大的 DTD 文件。我用过 trang将它们转换为 XSD 文件,这样我就可以轻松地从 JAXB 和其他实用程序中使用它。但是,生成的 XSD 文件的所有声明元素都位于顶层。这意味着任何元素都
是否有任何工具可以将文件从给定的起始偏移量复制到给定的(结束)偏移量。我还想通过运行 md5sum 确认该工具已正确复制指定的字节。像这样的东西 1) Copy source file star
所以,我有一个程序,我可以使用 Path2D 对象将形状添加到 JPanel,然后我可以单击并拖动它们。我想要做的是能够找到药物后形状的最终 X 和 Y 坐标。坐标必须是左上角坐标。有什么想法吗? /
我是一名优秀的程序员,十分优秀!