Pergunta

Estou prestes a implementar um algoritmo para calcular uma incorporação planária.

Eu comecei a verificar meus resultados em execução em um conjunto de gráficos ( Roma gráficos ) e comparando meus resultados aos resultados de outra implementação (YFILES). No entanto, eu só posso verificar se a resposta planar / não plana é igual, porque para um determinado gráfico planar, pode existir muitos incorporamentos diferentes.

Como posso verificar se a incorporação calma (encomenda nas listas de adjacência) é uma incorporação segreativa de planar?

Eu já descobri alguns casos em que eu provavelmente recebo uma incorporação errada. Para falhar gráficos geralmente desenhando as incorporações manualmente ficam difíceis. Eu descobri que o reforçar documentos Estado que Qualquer gráfico, pode-se produzir um desenho plano de um gráfico, que certificará que o gráfico é planário e o certificado de planaridade é fácil de verificar. Mas também não tenho certeza se / como posso criar um desenho de forma tão algorítmica à prova de serem apenas as listas de adjacência ordenadas.

(btw. Aqui está o meu código )

Foi útil?

Solução

A maneira mais fácil de saber é calcular uma árvore arbitrária, verifique se as bordas restantes não têm ciclos no gráfico duplo.Se Dnext (E) mapeia uma meia-borda E com a cabeça V para a próxima meia-borda no sentido do sentido anti-horário com a cabeça V, e SYM (E) é a meia-borda oposta de E, então RPREV (E)= SYM (DNEXT(e)) é a próxima meia-borda no sentido horário com a mesma face direita.Eu implementei essa abordagem em algorithm.java de um projeto de mina: http://www.davideisenstat.com/gotejamento /

Alternativamente, você poderia usar a característica de Euler.Etiquete os vértices (= ciclos da permutação DNEXT) e faces (= ciclos da permutação RPRev) e determinam quantos componentes conectados existem.Verifique se (v - c) + (f - c)= e.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top