图中交集的数量
Nuimberof intersection in a graph
我正在用 sagemath 做一个项目,我有一个这样的列表 [(0, 2), (1, 3), (2, 1), (3, 0)]。它在下面创建了一个图表,并使用该图表计算出交叉点的数量为 5(以紫色标记)
如何在不绘制图表的情况下计算该值?还是用图表?
我觉得这个问题很有趣。你能不能像这样解决问题:将你的图形点视为图层。让我们根据您左侧的起始点将它们命名为零到三。
然后从顶部开始循环图层并检查它下面的所有图层。如果从下面开始的每条线的终点比您的线的终点高一层,则每条线都会穿过您的线。
代码应该是这样的。
lines = [(0,3),(1,2),(2,0),(3,1)] #translated your cordinates.
cross = 0
lines.sort() # we want order lines so upper starting point is first
for i in range(len(lines)): #using index here, easier this time.
my_start = lines[i][0]
my_end = lines[i][1]
for line_below in lines[i:]: # loop through lines below
if line_below[0] == my_start:
continue # We don't count crossing if we have the same starting point.
if line_below[1] < my_end:
cross += 1 #if end point is higher than my end poi, we'll corss
我会像这样想象你的起点/终点,而不是右侧的随机顺序:
0 0
1 1
2 2
3 3
但实际上,无论您的图表中有多少起点或终点,这种方法都有效。如果线在起点或终点相遇,或者两条线相同(相同的起点和终点),则代码不计算交叉。
下面给出的代码中,L是第二个变量的List。
所以对于上面的问题L = [2,3,1,0]
def Ans(L):
NL=[]
count=0
for i in range(0,len(L)):
for j in range(0,len(L)):
ifL[j]==i:
NL.append([i,j])
for i in range(0,len(L)):
forjinrange(0,i+1):
if(NL[i][1]<NL[j][1]):
count=count+1
returncount
我正在用 sagemath 做一个项目,我有一个这样的列表 [(0, 2), (1, 3), (2, 1), (3, 0)]。它在下面创建了一个图表,并使用该图表计算出交叉点的数量为 5(以紫色标记)
如何在不绘制图表的情况下计算该值?还是用图表?
我觉得这个问题很有趣。你能不能像这样解决问题:将你的图形点视为图层。让我们根据您左侧的起始点将它们命名为零到三。
然后从顶部开始循环图层并检查它下面的所有图层。如果从下面开始的每条线的终点比您的线的终点高一层,则每条线都会穿过您的线。
代码应该是这样的。
lines = [(0,3),(1,2),(2,0),(3,1)] #translated your cordinates.
cross = 0
lines.sort() # we want order lines so upper starting point is first
for i in range(len(lines)): #using index here, easier this time.
my_start = lines[i][0]
my_end = lines[i][1]
for line_below in lines[i:]: # loop through lines below
if line_below[0] == my_start:
continue # We don't count crossing if we have the same starting point.
if line_below[1] < my_end:
cross += 1 #if end point is higher than my end poi, we'll corss
我会像这样想象你的起点/终点,而不是右侧的随机顺序:
0 0
1 1
2 2
3 3
但实际上,无论您的图表中有多少起点或终点,这种方法都有效。如果线在起点或终点相遇,或者两条线相同(相同的起点和终点),则代码不计算交叉。
下面给出的代码中,L是第二个变量的List。
所以对于上面的问题L = [2,3,1,0]
def Ans(L):
NL=[]
count=0
for i in range(0,len(L)):
for j in range(0,len(L)):
ifL[j]==i:
NL.append([i,j])
for i in range(0,len(L)):
forjinrange(0,i+1):
if(NL[i][1]<NL[j][1]):
count=count+1
returncount