给定一个参数k,我试图从有向图中删除k个边,这样最大流就会尽可能地减少。这个图有一个源和一个接收器t,每个边的容量是一个。图可能包含循环,也可能不包含循环。
我建议的解决方案是首先对图执行拓扑排序,使用“宽恕”循环的算法--也许是通过忽略将我们带回源的边缘。然后(假设k >= 1):
i = 0
for each vertex u order by topological(u)
for each edge (u, v) order by topological(v) descending
if topological(v) > topological(u) th
我正在尝试确定最佳的算法来解决一个分配课程的要求。要求有一定数量的学分,才能被视为满足。课程有很多学分,当被录取的时候。因此,数据结构看起来类似于:
export class Course {
constructor(public id:number,
public credits:number) {
}
}
export class Requirement {
constructor(public id:number,
public name:string,
public credits:nu
我有一个学生的课程清单,以及几个要求。每一项要求包括满足这一要求的课程清单和必须参加的此类课程的数量。
在一门课程一次只能计算一项要求的限制下,我如何判断学生是否通过了所有的要求?
我最初的想法是遍历需求列表,并在需求使用时将课程从学生的列表中删除,但如果一门课程出现在多个需求列表上,则可能会遇到困难:
Student's courses: A, B, C, D
Requirement Foo: 2 courses from A,B,C,D
Requirement Bar: 1 course from A,B
如果首先使用A和B来填充需求Foo,则无法使用它们来填充需求栏。
我怎样才
有一些开关和灯是有墙的,一个开关只能连接一个灯。灯、开关和墙以这种形式被赋予x,y点。
Walls = [(1,2),(1,5),(8,5),(8,3),(11,3),(11,1),(5,1),(5,3),(4,3),(4,1),(1,1),(1,2)]
Lights = [(2,4),(2,2),(5,4)] # In red can only be turned on by one switch
Switches = [(4,4),(6,3),(6,2)] # In green can only turn on one light
graph = {}
residual = {}
在最近的一次计算中,我被要求设计一种算法,即for a network having V vertices and E edges, if by adding an edge (it's capacity should be 1) results in increase the maximum flow.,我们必须设计这样的算法来找到这样的边。
算法应该比O(|E|* h(|V||E|))更快,其中h(|V||E|)是计算最大流所用的时间。
提前谢谢。如果不清楚,请告诉我。
如果只有一种数据类型,多维数组比结构数组更好吗?例如,一个数组:
struct data{
short datapointa;
short datapointb;
short datapointc;
}
比…更好
short data[100][100][100][100];
如果有几种数据类型,几个数组会比一个结构数组更好吗?
我需要用这样的方式划分一个图,即节点X和节点Y不再连通。另外,移除的边的权重之和必须是最低的。
例如:
3 1 2
X ----- Z ----- W ----- Y
应成为:
3 2
X ----- Z W ----- Y
我首先认为我可以用一个循环来计算X和Y之间的最短路径,并去掉最便宜的边,直到没有更多的路径为止。然而,经过思考,我意识到这种方法并非在所有情况下都有效。
维基百科的搜索给我带来了Kernighan-Lin和Fiduccia-Mattheyses算法,但它们似乎是为了解决其他分区问题。
有标准的