c語言,有向圖裡如何檢測是否有環

時間 2021-08-30 10:27:48

1樓:4終

1、為其定義乙個名稱,就叫【stackempty】。

2、接下來在引數中傳遞乙個top表過來。

3、好了後就可以定義他的返回型別,空表時返回1,非空返回0,因此為整形。

6、然後就能寫上這樣的一段判斷語句。

6、為了遵循乙個出口,不建議程式中有兩個return語句,建議定義乙個變數。

6、然後返回這變數,這樣就能更好的提高程式的可讀性。執行就可以了。

2樓:匿名使用者

有向圖是否有環的判定演算法,主要有深度優先和拓撲排序2中方法。

1、拓撲排序,如果能夠用拓撲排序完成對圖中所有節點的排序的話,就說明這個圖中沒有環,而如果不能完成,則說明有環。

2、strongly connected components。我們可以回憶一下強連通子圖的概念,就是說對於乙個圖的某個子圖,該子圖中的任意u->v,必有v->u,則這是乙個強連通子圖。這個限定正好是環的概念。

所以我想,通過尋找圖的強連通子圖的方法應該可以找出乙個圖中到底有沒有環、有幾個環。

3、改進的dfs

單純用dfs是不能夠的。如果題目給出的是乙個無向圖,dfs是可以解決的。但無向圖得不出正確結果的。

比如:a->b,a->c->b,我們用dfs來處理這個圖,我們會得出它有環,但其實沒有。

我們可以對dfs稍加變化,來解決這個問題。解決的方法如下:

圖中的乙個節點,根據其c[n]的值,有三種狀態:

0,此節點沒有被訪問過

-1,被訪問過至少1次,其後代節點正在被訪問中

1,其後代節點都被訪問過。

按照這樣的假設,當按照dfs進行搜尋時,碰到乙個節點時有三種可能:

1、如果c[v]=0,這是乙個新的節點,不做處理

2、如果c[v]=-1,說明是在訪問該節點的後代的過程中訪問到該節點本身,則圖中有環。

3、如果c[v]=1,類似於2的推導,沒有環。 在程式中加上一些特殊的處理,即可以找出圖中有幾個環,並記錄每個環的路徑.

c語言 建立乙個有向圖,判斷該圖是否存在環,如果不存在環,輸出它的拓

3樓:匠乒佬

1.拓撲排序:還有頂點未輸出,但已經不存在沒有前驅的頂點了2.深搜:從乙個頂點出發存在搜回到自己的路徑

下面哪一方法可以判斷出乙個有向圖是否有環

4樓:13336544451電

a可以,深搜萬能,就bai是時間有du點那個b當然可以,拓樸zhi

排序本來就是在無環

dao圖才有版解的

c.求最短路徑,這個..一般權

不行,不過你用floyd修改我也無語了,可以,但時間代價有點大d.廣度優先遍歷,這個。。應該也可以吧,就是只要佇列重複就有環,不過判斷很麻煩,得細細做才能出來。

用寬搜是不是有點大材小用?

單選選b

因為b是基礎的就可以,不需修改

C語言有什麼實質用途,C 語言於C語言有什麼本質的區別嗎 第一次接觸語言,學習哪種語言

c語言可以做的範圍很廣,目前優勢專案主要包括以下方面 c語言是做工程是依賴庫的,用相應的庫,就可以做相應的事情。當然,如果沒有現成的庫,也可以寫乙個 作業系統 驅動開發。c語言是本地語言,訪問硬體很方便,而且執行效率高效,所以是作業系統和驅動開發的首選語言。無論是windows還是unix linu...

如何用C語言判斷ip位址是否合法

b類是。255,c類是。然後判斷身份證的長度。在a級ip位址中,網路標識的長度為8位,主機標識的長度為24位,子網掩碼為。b類適用於網路id長度為16位 主機id長度為16位 子網掩碼為。0的中型網路。c類適用於網路標識長度為24位 主機標識長度為8位 子網掩碼為。的小型區域網。3.最後,判斷是否合...

c語言的特點有哪些,C語言的特點有哪些?

c語言是一個有結構化程式設計 具有變數作用域以及遞迴功能的過程式語言。c語言傳遞引數均是以值傳遞,另外也可以傳遞指標。不同的變數型別可以用結構體組合在一起。只有32個保留字,使變數 函式命名有更多彈性。部份的變數型別可以轉換,例如整型和字元型變數。通過指標,c語言可以容易的對儲存器進行低階控制。預編...