2017-05-30 62 views
-4

混淆本semgent的代碼 強連通分量所以這些是兩個函數,我想是手推車計算採用c編程語言

void dfsloop1(int **g) 
{ 
    int i; 
    int temp=0; 
    for(i=0;i<875714;i++) 
    { 
     temp = f[i]; 
     x[temp-1] = i; 
    } 
    for(i=875714;i>0;i--) 
    { 
     if(!explored[x[i-1]]) 
     { 
      s = i-1; 
      dfs1(g,x[i-1]); 
     } 
    } 
} 

void dfs1(int **g,int i) 
{ 

    explored[i] = 1; 
    leader[i] = s; 
    int j; 
    for(j=0;j<a[i];j++) 
    { 
     if(!explored[(g[i][j]-1)]) 
     { 
      dfs1(g,g[i][j]); 
     } 
    } 
} 

這裏探討陣列記賬節點的/頂點被選中或不如果它被選中然後說第i個頂點檢查then explored[i-1] = 1 else explored[i-1] = 0,a[i]店多少頂點i+1個頂點連接 例如頂點一號與2,4,5連接,然後a[0]將是3,圖中鄰接表過去了,我已經在反向圖上運行dfs並將該神奇編號存儲在f [i] 使用kosaraju的算法,現在我試圖在我的原始圖上運行dfs g x [i] 我正在以遞增的順序存儲f [i],例如讓我們說9個頂點圖f[0] = 7,f[1] = 3,f[2] = 1,f[4] = 2,f[5] = 5,f[6] = 9,f[7]=4,f[8] = 6 then x[0] = 2(這是最小的索引f[i]),x[1] = 4,x[2] = 1等等。

,如果我留下一些什麼不清楚,請讓我知道。 感謝

頂點的總數爲875714

我是在新的計算器,如果我做錯了什麼讓我知道

感謝

+4

請提供[MCVE。另見:[問]。 –

+2

你的問題是什麼?在使用變量作爲數組索引之前,先進行一些範圍檢查通常是個好主意。 – imqqmi

+0

我使用kosaraju的算法https://drive.google.com/open?id=0B-iTBQCLcXUabHMxRmRGNmNzY1U是一個例子 – help

回答

0

我看你的代碼。我假設你是新來的,因爲你的主要功能是混雜在實際上並不方便的代碼中。
兩件事情:
1.您正在處理的指針和指針也指針。
2.您正在爲局部變量/指針消耗超過10^5個整數內存。

我沒有關於指針很多知識。然而,作爲參賽者,我曾在本地聲明巨大大小的數組時使用「運行時錯誤」。所以,我認爲你的問題在於這兩個部分。嘗試在全局聲明指針的指針。看看它是否有幫助。

我給你的SCC算法的鏈接。
E-MAXX:https://e-maxx-eng.appspot.com/graph/strongly-connected-components.html

,我的實SCC的:
https://bitbucket.org/techboy_zero/programming-and-software-development/src/035560584ce7ab7e0a3f6ab5ae1406095bd39b62/Programming%20Contest%20Algorithms/Graph%20Theory/Strongly_Connected_Component.cpp

雖然,我的是在C++。只要看看dfs和kosaraju的功能。如果您對關鍵字有任何疑問,請在cplusplus.com中搜索。如果不瞭解機制,隨時可以問我。