我正在寻找一种算法,它可以告诉我是否可以仅遍历单向图的所有边一次。该算法必须能够从任何节点开始并遍历整个图,而无需重新访问相同的边。
所以我在 StackOverflow 中看到了以下关于 Python 中 DFS 算法的帖子(非常有帮助):
这个python代码是否使用深度优先搜索(DFS)来查找所有路径?
我还有一个需要分析的图(以找到两个节点之间的每条可能的路径),但我还需要在那里包括循环。例如,如果我有这样的图表:
graph = {'Start': ['1'],
'1': ['2'],
'2': ['3','End'],
'3': ['2','End']}
Run Code Online (Sandbox Code Playgroud)
我想要以下输出:
Start, 1, 2, 3, End
Start, 1, 2, End
Start, 1, 2, 3, 2, End
Start, 1, 2, 3, 2, 3, End
Run Code Online (Sandbox Code Playgroud)
是否有任何可能的方法来更改以下代码以执行此操作?
def find_all_paths(graph, start, end, path=[]):
path = path + [start]
if start == end:
return [path]
if not graph.has_key(start):
return []
paths = []
for node in graph[start]:
if node not in path:
paths += find_all_paths(graph, node, …Run Code Online (Sandbox Code Playgroud) 算法如下:
该算法首先对 dag 进行拓扑排序(参见第 22.4 节)以对顶点进行线性排序。如果 dag 包含从顶点 u 到顶点 v 的路径,则在拓扑排序中 u 在 v 之前。我们只对拓扑排序的顶点进行一次遍历。当我们处理每个顶点时,我们放松离开顶点的每条边。
有人能告诉我它背后的直觉吗?并且使用这种直觉请告诉我们如何找到最长路径只是否定边缘权重并运行算法
我们不能使用 Dijkstra 算法,因为允许边具有负权重。
数据存在于 excel 文件中,第一列代表第一个节点,第二列代表第二个节点,第三列包含权重。
节点是字符串。
例如:
苹果香蕉 65
橙苹果 32
我正在构建一个以城市为节点的图,边缘是连接这些节点的主要高速公路。
我的边属性是高速公路的长度和从起点到目的地节点所需时间的估计。
NetworkX 具有计算距离度量的算法,例如直径(距离最远的节点之间的最短路径)、偏心度(从一个节点到所有其他节点的最大距离)和半径(整个网络的最大偏心度)。
是否可以使用我上传到网络的边缘属性(如以英里为单位的距离和以分钟为单位的时间)来计算这些指标?
我很难找到有关如何在scipy 中使用和获取各种搜索算法的路径的教程/示例。
google 中最常见的就是这个例子,在这个例子的末尾有一些错误,带括号。
from scipy.sparse.csgraph import dijkstra
distances, predecessors = dijkstra(graph, indices = i1, return_predecessors = True)
path = []
i = i2
while i != i1:
path.append(word_list[i])
i = predecessors[i]
path.append(word_list[i1])
print path[::-1]i2]
Run Code Online (Sandbox Code Playgroud)
我没有输入,所以我无法复制它,但我认为只需删除 i2] 即可。
我的主要问题是如何搜索计算所有索引的图形,而不是给出它indices=i1,这是一个可选参数。同样,如何使用 Floyd-Warshall 方法并获取从任何i,j索引到任何其他i,j索引的路径。我的部分困惑是缺乏对前辈矩阵真正是什么以及如何解析它的描述。
有没有更详尽的教程,或者有人可以举一些简单的例子来梳理和理解吗?
我怎样才能得到这个结果:
[
{Paris,Amsterdam,Berlin},
{Paris,Bruxelles,Amsterdam,Berlin},
{Paris,Bruxelles,Berlin}
]
Run Code Online (Sandbox Code Playgroud)
从这个数组:
[
{ HD: '9:20', V1: 'Paris', V2: 'Amsterdam', D: '3:20' },
{ HD: '8:30', V1: 'Paris', V2: 'Bruxelles', D: '1:20' },
{ HD: '10:00', V1: 'Bruxelles', V2: 'Amsterdam', D: '2:10' },
{ HD: '12:30', V1: 'Amsterdam', V2: 'Berlin', D: '6:10' },
{ HD: '11:30', V1: 'Bruxelles', V2: 'Berlin', D: '9:20' }
]
Run Code Online (Sandbox Code Playgroud)
我想从这个数组映射数据,以获得从一个城市到另一个城市的路径的所有可能性,例如从“巴黎”到“柏林”。
我有一个图像名称列表和一个(阈值)相似度矩阵。相似关系是自反的和对称的,但不一定是传递的,即如果image_i与image_j和相似image_k,那么它不一定意味着image_j和image_k是相似的。
例如:
images = ['image_0', 'image_1', 'image_2', 'image_3', 'image_4']
sm = np.array([[1, 1, 1, 0, 1],
[1, 1, 0, 0, 1],
[1, 0, 1, 0, 0],
[0, 0, 0, 1, 0],
[1, 1, 0, 0, 1]])
Run Code Online (Sandbox Code Playgroud)
相似度矩阵sm解释如下:如果sm[i, j] == 1然后image_i和image_j相似,否则它们不相似。在这里我们看到image_0与image_1and相似image_2,但image_1和image_2不相似(这只是非传递性的一个例子)。
我想保留最大数量的唯一图像(根据给定的sm矩阵,它们都是成对非相似的)。对于这个例子,它是[image_2, image_3, image_4]或[image_1, image_2, image_3](通常有多个这样的子集,但我不介意保留哪个,只要它们是最大长度)。我正在寻找一种有效的方法来做到这一点,因为我有成千上万的图像。
编辑 …
我正在编写代码来解决leetcode 上的这个问题,
我解决这个问题的策略是:
class Solution {
public:
void psUtil(vector<vector<int> >&mat, int x, int y, int m, int n, int &isP, int &isA, vector<vector<int> >&vis, vector<vector<int> >&ans)
{
//check dstinations
if(x == 0 || y == 0)
{
isP = 1;
}
if(x == m || y == n)
{
isA = 1;
}
vector<int> cell(2);
cell[0] = x;
cell[1] = y;
// check both dst rched
if(isA …Run Code Online (Sandbox Code Playgroud) 假设我有以下数据框:
index A B
-----------------
1 A1 B1
2 A1 B2
3 A1 B3
4 A2 B1
Run Code Online (Sandbox Code Playgroud)
我如何编写返回这些对 (Ax,By) 的代码,这些对满足这样的条件,即 Ax 与更多不同的 Bs 连接,而不是 By 与不同的 As 连接。
在这种情况下,它应该返回 (A1, B1),因为 A1 与 3 个不同的 B 相连,但 B1 与 2 个不同的 As 相连。