bastardos
19-12-2007, 16:50
Boas.
Estou a fazer um programa em c++ para coloração de grafos com lista de adjacências.
O problema e que acho a coloração não está a ser bem feita porque o grafo não está a ser percorrido correctamente, não sei porque. Gostaria que me ajudassem. Está aqui a função que faz a coloração.
template<class TV, class TR>
void ListAdjGrafo<TV,TR>::ColorirProfundamente(Vertice<TV,TR> *actual)
{
int cor=0,i=0;
int cores[4]={1,2,3,4};
Vertice<TV,TR> *aux;
Ramo<TV,TR> *auxr;
if(!actual->visited)
{
while(actual->getCor()==cores[i])
i++;
cor=cores[i];
actual->setCor(cores[i]);
//actual->visited=true;
auxr=actual->apramo;
while(auxr!=NULL)
{
aux=auxr->apv;
/* O if aqui em baixo n serve para nada
é só para fazer uns testes aqui é onde se vai
comparar a cor com a cor dos que lhe estão directamente ligados*/
if(aux->getCor()!= cores[i])
cout<<"cor diferente\n";
else
{
i=0;
while(aux->getCor()==cores[i])
i++;
actual->setCor(cores[i]);
cout<<"cor igual\n";
}
auxr=auxr->apr;
}
aux=actual->apvertice;
while(aux!=NULL)
{
aux->setCor(cores[i]);
ColorirProfundamente(aux);
cout<<"mais um vertice\n";
aux=aux->apvertice;
}
}
}
Obrigado desde ja.
Cumprimentos
Estou a fazer um programa em c++ para coloração de grafos com lista de adjacências.
O problema e que acho a coloração não está a ser bem feita porque o grafo não está a ser percorrido correctamente, não sei porque. Gostaria que me ajudassem. Está aqui a função que faz a coloração.
template<class TV, class TR>
void ListAdjGrafo<TV,TR>::ColorirProfundamente(Vertice<TV,TR> *actual)
{
int cor=0,i=0;
int cores[4]={1,2,3,4};
Vertice<TV,TR> *aux;
Ramo<TV,TR> *auxr;
if(!actual->visited)
{
while(actual->getCor()==cores[i])
i++;
cor=cores[i];
actual->setCor(cores[i]);
//actual->visited=true;
auxr=actual->apramo;
while(auxr!=NULL)
{
aux=auxr->apv;
/* O if aqui em baixo n serve para nada
é só para fazer uns testes aqui é onde se vai
comparar a cor com a cor dos que lhe estão directamente ligados*/
if(aux->getCor()!= cores[i])
cout<<"cor diferente\n";
else
{
i=0;
while(aux->getCor()==cores[i])
i++;
actual->setCor(cores[i]);
cout<<"cor igual\n";
}
auxr=auxr->apr;
}
aux=actual->apvertice;
while(aux!=NULL)
{
aux->setCor(cores[i]);
ColorirProfundamente(aux);
cout<<"mais um vertice\n";
aux=aux->apvertice;
}
}
}
Obrigado desde ja.
Cumprimentos