python tarjan演算法實現

2021-08-21 11:26:04 字數 1709 閱讀 5287

#coding:utf-8

#tarjan 演算法

##求任意頂點開始的聯通圖 有且僅存在乙個 且dfn[u] == low[u]

from collections import ordereddict

matric = [[0,1,1,0,0,0],[0,0,0,1,0,0],[0,0,0,1,1,0],[1,0,0,0,0,1],[0,0,0,0,0,1],[0,0,0,0,0,0]]

dfn = ordereddict()

low = ordereddict()

flag = dict()

count = 0

n = 6

num = 0

class stack(object):

def __init__(self):

self.items = list()

def push(self, item):

def pop(self):

return self.items.pop()

def clear(self):

del self.items[:]

def empty(self):

return self.size() == 0

def size(self):

return len(self.items)

def top(self):

return self.items[self.size() - 1]

s = stack()

def tarjan(u):

global s,num,n,count,flag,stack,dfn,low,matric

count = count + 1

dfn[u] = low[u] = count

s.push(u)

flag[u] = true

#print("visiting ...".format(str(u + 1)))

for i in range(n):

if matric[u][i] == 0:

continue

if flag.get(i, false) is true:

if (dfn[i] < low[u]):

low[u] = dfn[i]

else:

tarjan(i)

low[u] = min(low[u], low[i])

if (dfn[u] == low[u] and s.empty() is false):

print("********連通圖********")

m = s.pop()

flag[m] = false

print(m + 1)

while m != u and s.empty() is false:

num = num + 1

m = s.pop()

flag[m] = false

print(m+1)

print("*********************")

if __name__ == "__main__":

pass

tarjan(3)

print("連通圖數量...")

print(num)

tarjan 演算法 求任意頂點開始的 連通圖 (相對於一般演算法 每個頂點 只進行一次正向深度優先搜尋)

Perona Malik 演算法Python實現

最近正好在學習關於影象處理的東西,需要用到pm perona malik 演算法,所以就把自己的一些理解和 貼上來,希望能跟大家一起 pm演算法的具體原理可以網上查閱相關資料或者相關書籍,這裡只是簡要介紹大概的實現思路 一般而言,對乙個影象進行提取特徵之前,需要進行降噪濾波處理。最常用的應該是高斯濾...

Miller Rabin演算法 Python實現

用python實現了miller rabin的素性檢驗演算法 import random deflargeprime generate bit 1024 print generating large prime.i 1while true num random.randrange 2 bit 1 2...

k means演算法和c means演算法對比例項

演算法對比的前提是首先要有足夠的資料量,所以我這裡先從王者榮耀資料庫裡面採集了職業選手進四年數場比賽中的kda,參團率,場均擊殺,最高擊殺,場均死亡,最高死亡,場內助攻以及最高助攻八個維度的資料,共1330組。隨後將其匯入matlab中,分成八個列,一維一列 fcm演算法原理 fcm 是一種聚類方法...