請各位高手給我一個算法!謝謝大家!急!!!急!!!


題目: B是A的子類
      C是B的子類
      D是C的子類
      E是D的子類
      A是或者不是E的子類
      假如A是E的子類的話 那么它們就構成一個圈
      假如A不是E的子類的話 那么它們就構不成一個圈
      怎么判斷有無圈,如果有圈怎么去掉圈?
             
如下圖所示:  
      B  is subclass of  A
      C  is subclass of  B
      D  is subclass of  C
      E  is subclass of  D
      A  is/is not subclass of  E
                    
                      A

              B
                             E

              
              C
                        D

11 个解决方案

#1


建一個鏈表,每個結點的next域指向其子類結點。經典算法是:
定義兩個指針,fast和slow,初始時均指向第一個結點,然后fast每次向后移動兩個結點,slow每次向后移動一個結點。然后每次都判斷fast和slow是否指向同一個結點。若是,則鏈表中存在環;若直到next為空的結點仍然沒上述情況發生,則無環。over。

#2


up!

#3


trackant(蟻跡尋蹤):   您好!~
   非常感謝你的解答!我還有個請求!您可以幫我把這個算法具體化一點嗎?
不勝感激!

#4


你沒學過數據結構是不是?沒學過也沒關系。只需要用到一些struct和malloc()的知識而已。
比如你可以定義
struct subclass{
char ch;
struct subclass *next;
};
其中ch用於存儲類名,next指向其子類結點,無子類的指向NULL,這樣就構成了一個鏈表。
鏈表創建好后執行:
for(fast=slow=head;fast!=NULL&&fast->next!=NULL;fast=fast->next->next,slow=slow->next)
    if(fast==slow)則有環;

一般的c語言的書在介紹struct時都有介紹鏈表的創建,查找,插入,刪除等。隨便看看就行,或者任何一本數據結構書的線性表部分也行。只要理解鏈表,算法實現就很簡單了,如前面所說的。

#5


for循環有點小問題,改成while循環:
fast=slow=head;
while(fast!=NULL&&fast->next!=NULL)
{
    fast=fast->next->next;
    slow=slow->next;
    if(fast==slow)則有環;
}
若退出while,則無環;

#6


trackant(蟻跡尋蹤):   您好!~
   非常感謝你的解答!非常不好意思啊!您可否把這個算法再再具體化一點嗎?
不勝感激!
    
    因為我的編程能力實在是很爛!好久沒有編程了!老師又非要讓我交這個算法給他!
我命好苦啊!他還要我用  圖論 三元組 的方法作出這個算法啊~!郁悶!

#7


看看離散數學的拓撲排序部分,很容易的

#8


cngdzhang :     您好!
     可是要求要用圖論來解決啊!
     我們當初沒有上圖論這章啊!現在就連上過的離散內容也已經忘得差不多了!
     如果您有好的圖論  三元組的方法來解決這個算法,請賜教!謝謝!

#9


圖論的你可以試一下深度優先算法,每個struct里多一個標志域,初始為0,搜索過置1,就是數據結構里圖的那章。用圖的算法中很容易就可以判斷該圖是否為一個樹,即是否有環。不過這個算法相比前面的算法要繁一些。
說實話你這樣不行,對基礎算法不夠熟悉,好像寫代碼的功夫也不太行,還是看一下相關的書吧。

#10


順便說一下,拓撲算法也是基於圖的算法。就是找出沒有父結點的結點,把它刪除,這樣會導致一些原來有父結點的結點變成沒父結點,繼續刪除這樣的結點,直到無法刪除為止。若原圖無環,則所有結點均會被刪除;若有環,則算法結束后仍有結點未刪除,over。

算法只能說這么多了,自己實現吧。

#11


兄台,我已經不打算再學計算機了,我已經轉考研方向了,只是做畢業設計老師非要我做一下這個算法,實在是沒有辦法才來求救的!不過還是非常非常呢感謝您!

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com