如何找到什麼頂點由週期無向圖如果只有一個圖表週期?如何找到什麼頂點由週期無向圖如果只有一個圖表週期?
我有一些代碼在圖中尋找週期,但現在我需要的代碼,將發現的頂點週期是由什麼。
下面是用於發現循環碼(在C++):
bool dfs(int x)
{
state[x] = 1;
for(int j = 0; j < ls[x].size(); j++)
{
if(state[ls[x][j]] == 1 and parent[x] != ls[x][j])
{
t = 0; // Graph contains cycle.
return t;
}
if(state[ls[x][j]] == 0)
{
parent[ls[x][j]] = x;
dfs(ls[x][j]);
}
}
}
void detect_cycle()
{
memset(state, 0, sizeof state);
memset(parent, 0, sizeof parent);
for(int i = 1; i <= n; i++)
if(state[i] == false)
dfs(i);
}
感謝。
這是最終的代碼。多謝你們。
bool dfs(int x)
{
state[x] = 1;
for(int j = 0; j < ls[x].size(); j++)
{
if(state[ls[x][j]] == 1 and parent[x] != ls[x][j])
{
if(t)
{
printf("Cycle entry: %d\n", ls[x][j]);
printf("Cycle contains: %d, %d ", ls[x][j], x);
int cycleNode = parent[x];
while(cycleNode != ls[x][j])
{
printf("%d ", cycleNode);
cycleNode = parent[cycleNode];
}
}
t = 0;
return t;
}
if(state[ls[x][j]] == 0)
{
parent[ls[x][j]] = x;
dfs(ls[x][j]);
}
}
}
嘿,tnx。我不知道爲什麼,但是你的代碼運行無限循環。但這是我的代碼。這和你的一樣。謝謝。 – user2555240
是的,對不起。我重寫了它;現在它應該工作並輸出循環中的節點(按照我們訪問過的順序)。 代碼:http://ideone.com/xlFo3U – h8red