我们如何解决Maven循环依赖?
假设A是父项目,B和C是子项目.如果B依赖于C而C依赖于B,除了拥有不同的项目之外,还有什么方法可以解决循环依赖性.
假设我们有两个具有循环依赖关系的模块:
# a.py
import b
def f(): return b.y
x = 42
Run Code Online (Sandbox Code Playgroud)
# b.py
import a
def g(): return a.x
y = 43
Run Code Online (Sandbox Code Playgroud)
这两个模块在目录pkg中为空__init__.py.导入pkg.a或pkg.b正常工作,如本答案中所述.如果我将导入更改为相对导入
from . import b
Run Code Online (Sandbox Code Playgroud)
我ImportError试图导入其中一个模块时得到一个:
>>> import pkg.a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pkg/a.py", line 1, in <module>
from . import b
File "pkg/b.py", line 1, in <module>
from . import a
ImportError: cannot import name a …Run Code Online (Sandbox Code Playgroud) 我们如何检测有向图是否是循环的?我认为使用广度优先搜索,但我不确定.有任何想法吗?
即为什么以下"循环依赖"不可能?
public class Something implements Behavior {
public interface Behavior {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
由于接口不引用外部类,因此应该允许; 但是,编译器迫使我在类外定义那些接口.这种行为有合理的解释吗?
设G是包含周期的未加权有向图.我正在寻找一种算法,它可以找到/创建所有非循环图G',它由G中的所有顶点和G的边缘子集组成,只要小到足以使G'非循环.
更正式:所需算法使用G并创建一组非循环图S,其中S中的每个图G'满足以下属性:
背景:原始图G模拟元素之间的成对排序.由于图中的循环,这不能被用作对所有元素的排序.因此,最大非循环图G'应该模拟这种排序的最佳可能近似,试图尽可能多地考虑成对排序关系.
在一种天真的方法中,人们可以去除所有可能的边缘组合,并在每次移除后检查是否有空隙.在这种情况下,存在强烈分支的变化树,意味着时间和空间复杂性差.
注意:问题可能与生成树有关,您可以将G'图定义为一种有向生成树.但请记住,在我的场景中,G'中的一对边可能具有相同的起始或相同的结束顶点.这与文献中使用的定向生成树的某些定义相冲突.
编辑:添加了与生成树相关的直观描述,背景信息和注释.
我想知道一个快速算法,以确定给定的图形是否是一棵树.
这篇文章似乎处理它,但不是很清楚.根据这个,如果图是非循环的,那么它就是一棵树.如果你考虑所示的有向和无向图的例子,在我看来只有1和4是树,但我认为3既不是循环也不是树.
所以我的问题是:需要检查什么才能有效地检查图形是否为树,无论是有向图还是无向图?
领先一步看看,如果树存在,那么它是否是二叉树?
我正在为一堂课写一本卡坦定居者.其中一项额外功能是自动确定哪个玩家的道路最长.我已经考虑过了,看起来深度优先搜索的一些细微变化可能会起作用,但我无法弄清楚如何处理循环检测,如何处理玩家的两个初始道路网络的加入,和其他一些细枝末节.我怎么能在算法上做到这一点?
对于那些不熟悉游戏的人,我会尝试简洁而抽象地描述问题:我需要在无向循环图中找到最长的路径.
我已经解决了这里发布的大多数问题,除了最长的路径之外.我已经读过关于最长路径的维基百科文章,如果图表是非循环的,那么这似乎是一个简单的问题.
那我怎么解决这个问题呢?蛮力,通过检查所有可能的路径?我怎么开始这样做?
我知道它会在图表上获得很多~18000.但我只是想开发它,因为它是项目所需要的,我只是测试它并在一个较小比例图表上向教师展示,执行时间只有一两秒钟.
至少我完成了所有必需的任务,并且我有一个运行的概念证明它可以工作但是在循环图上没有更好的方法.但我不知道从哪里开始检查所有这些路径......
我正在尝试用两个类实现一个树状结构:Tree和Node.问题是,从每个类我想调用另一个类的函数,所以简单的前向声明是不够的.
我们来看一个例子:
tree.h中:
#ifndef TREE_20100118
#define TREE_20100118
#include <vector>
#include "Node.h"
class Tree
{
int counter_;
std::vector<Node> nodes_;
public:
Tree() : counter_(0) {}
void start() {
for (int i=0; i<3; ++i) {
Node node(this, i);
this->nodes_.push_back(node);
}
nodes_[0].hi(); // calling a function of Node
}
void incCnt() {
++counter_;
}
void decCnt() {
--counter_;
}
};
#endif /* TREE_20100118 */
Run Code Online (Sandbox Code Playgroud)
Node.h:
#ifndef NODE_20100118
#define NODE_20100118
#include <iostream>
//#include "Tree.h"
class Tree; // compile error without this …Run Code Online (Sandbox Code Playgroud) 我有两个模块A和B.Actualy B是A的插件
.B在编译时依赖于A. 不依赖于B.在运行时我想将B添加到类路径中,所以在A的pom.xml中我添加了以下依赖项
pom.xml
<dependency>
<groupId>my_group</groupId>
<artifactId>my_Plugin</artifactId>
<version>${project.version}</version>
<scope>runtime</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
Maven进程因循环依赖性错误而失败
[ERROR] The projects in the reactor contain a cyclic reference: Edge between 'Vertex{label='A'}' and 'Vertex{label='B'}' introduces to cycle in the graph B-->A-->B -> [Help 1]
Run Code Online (Sandbox Code Playgroud)
[错误]
为什么运行时依赖会影响编译时
cyclic ×10
graph ×5
algorithm ×3
dependencies ×3
maven ×2
c ×1
c++ ×1
graph-theory ×1
header ×1
inheritance ×1
java ×1
longest-path ×1
python ×1
runtime ×1
tree ×1