让G =(V,E)为无向图。 找到最有效的算法来确定G是否具有大小大于等于3的团。
我认为: 如果G的大小大于3,则肯定有大小为3的队列,因此我们只需要查找大小为3的队列即可。
因此,我的算法是: 我用邻接矩阵来表示G。
def uniquePathsWithObstacles(self, obstacleGrid):
# obstruction at the start
if (obstacleGrid[0][0] == 1): return 0
# obstruction at the end
if (obstacleGrid[-1][-1] == 1): return 0
m, n = len(obstacleGrid), len(obstacleGrid[0])
memo = [[0] * n for i in range(m)]
# starting move
memo[0][0] = 1
# now check the first row
for j in range(1, n):
#memo[0][j] = 1 if (obstacleGrid[0][j] == 0 and memo[0][j-1] != 0) else 0
memo[0][j] = 1 if (obstacleGrid[0][j] == 0 and memo[0][j-1] != 0) else 0
# now check the first column
for i in range(1, m):
memo[i][0] = 1 if (obstacleGrid[i][0] == 0 and memo[i-1][0] != 0) else 0
# now check everything else
for i in range(1, m):
for j in range(1, n):
if (obstacleGrid[i][j] == 1): memo[i][j] = 0
else: memo[i][j] = memo[i-1][j] + memo[i][j-1]
return memo[-1][-1]
复杂度:如果在Adj矩阵中表示G,则DFS为O(V ^ 2)。
对于V中的每个v,我们检查所有Adj [v],因此我们检查G-O(V + E)中的所有顶点和边
要检查两个顶点v.pi,u是否形成边e =(v.pi,u)是否为O(1)
因此复杂度为O(V ^ 2)
我是对的吗? 谢谢