Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[OPT2 Branch] Doesn't detect every case of "Not Isolated Node" #3

Open
fmrsabino opened this issue Mar 16, 2014 · 1 comment
Open
Labels

Comments

@fmrsabino
Copy link
Collaborator

Para o ponto 3 pensei no seguinte: como estamos a analisar em profundidade então quando chegamos sempre ao fim da stack (ie.: quando começamos a fazer pops) sabemos que o pai desses nós a que estamos a fazer pop não são isolados (porque levaram até ao SCC actual). Atenção que este if só corre quando estamos presente um nó raiz e por essa razão resulta para a maior parte dos casos.

Basicamente dizemos enquanto estamos a contruir um SCC que o nó anterior (que vai pertencer a um SCC não está isolado).

Neste exemplo ele põe na stack o 1 e o 2 e depois tira o 1 e o 2 da stack e depois passa para o 3 e para o 4. Na altura em que ele tira o 3 e o 4 ele deveria dizer que o nó anterior (na stack) não é isolodo. Como o 1 o 2 já não estão na stack considerei isso um SCC fantasma (um SCC que não é isolado mas que não está na stack) e quando ele detecta essa situação diz que existe mais um SCC não isolado (isolatedSCC--)

image

if((!nodeStack.empty() && nodes[fatherNode]->checkedIsolation == false) || (phantomSCC && nodeStack.empty()) || (fatherNode != -1 && nPops == 1 && !adjacencias[u].empty())) {
            std::cout << "SCC with node " << fatherNode <<" is not isolated!" << std::endl;
            nodes[fatherNode]->checkedIsolation = true;
            numberOfIsolatedSCC--;
}

Estive a pensar e penso que seja problema do fatherNode. Ou seja um SCC estar ligado a mais SCC's mas nesses SCC's o father node ser diferente e aí ele considera que existe um SCC Não Isolado a mais...

A terceira condição do if é quando um estamos a tirar um nó da pilha (que é o nó raiz) e que ele tem vizinhos e esse vizinhos não estão na pilha porque já forma visitados. (ver o nó 3 do teste 1 que os professores dão que é um exemplo desse caso).

@fmrsabino fmrsabino added the bug label Mar 16, 2014
@fmrsabino
Copy link
Collaborator Author

Possível solução: Marcar o nó como não isolado e ao fazer pops verificar apenas uma vez essa condição.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant