A **Kuratowski-tétel** egy alapvető állítás a gráfelméletben, amely a síkbarajzolható gráfok karakterizációját adja. A tétel kimondja:
> Egy gráf akkor és csak akkor síkbarajzolható, ha nem tartalmaz \( K_5 \) (teljes gráf öt csúccsal) vagy \( K_{3,3} \) (három csúcspár teljes kétszeresen összekötött gráfja) topológiai minorát.
- Egy gráf **síkbarajzolható**, ha rajzolható síkban úgy, hogy élei csak csúcsokon találkoznak (nincsenek metsző élek).
- Egy gráf \( H \) egy másik gráf \( G \) topológiai minorja, ha \( H \) előáll \( G \)-ból élkontrahálások (összevonások), él- és csúcseltávolítások sorozatával.
- A \( K_5 \) és \( K_{3,3} \) kritikus nem síkbarajzolható gráfok, azaz ezek biztosan nem rajzolhatók le síkban, és minden síkbarajzolható gráf ezek topológiai minoraitól mentes.
Ha a gráf nem síkbarajzolható, akkor tartalmaz \( K_5 \)-öt vagy \( K_{3,3} \)-at topológiai minorban.
Ha egy gráf síkbarajzolható, akkor nem tartalmaz \( K_5 \)-öt vagy \( K_{3,3} \)-at topológiai minorban.
A két feltétel teljesülése bizonyítja a tételt.
- 5 csúcs, 10 él. - Nem síkbarajzolható, mert nem elég a síkon 4 diszjunkt régió az élek ábrázolásához.
- 6 csúcs, 9 él. - Nem síkbarajzolható, mert nem lehet az éleket úgy elhelyezni, hogy ne metsződjenek.
Egy síkbarajzolható gráfra teljesül: ahol:
Mivel \( f = 2 - v + e \), behelyettesítéssel:
import networkx as nx
def is_planar(graph):
"""
Ellenőrzi, hogy egy gráf síkbarajzolható-e.
Args:
graph: A NetworkX gráf objektuma.
Returns:
True, ha a gráf síkbarajzolható, különben False.
"""
planar, _ = nx.check_planarity(graph)
return planar
# Példa gráfok
G1 = nx.complete_graph(5) # K5
G2 = nx.complete_bipartite_graph(3, 3) # K3,3
G3 = nx.cycle_graph(5) # Egy síkbarajzolható gráf
print("K5 síkbarajzolható:", is_planar(G1)) # False
print("K3,3 síkbarajzolható:", is_planar(G2)) # False
print("C5 síkbarajzolható:", is_planar(G3)) # True
K5 síkbarajzolható: False K3,3 síkbarajzolható: False C5 síkbarajzolható: True
#include <iostream>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/planar_test.hpp>
using namespace boost;
int main() {
// Gráf deklarációja
typedef adjacency_list<vecS, vecS, undirectedS> Graph;
// K5 definiálása
Graph G(5);
add_edge(0, 1, G);
add_edge(0, 2, G);
add_edge(0, 3, G);
add_edge(0, 4, G);
add_edge(1, 2, G);
add_edge(1, 3, G);
add_edge(1, 4, G);
add_edge(2, 3, G);
add_edge(2, 4, G);
add_edge(3, 4, G);
// Planaritás ellenőrzése
if (boyer_myrvold_planarity_test(boyer_myrvold_params::graph = G)) {
std::cout << "K5 síkbarajzolható." << std::endl;
} else {
std::cout << "K5 nem síkbarajzolható." << std::endl;
}
return 0;
}
K5 nem síkbarajzolható.
A **Kuratowski-tétel** elengedhetetlen a síkbarajzolható gráfok azonosításához. Ez a tétel elméleti gráfelméleti problémák megoldásában és gyakorlati alkalmazásokban, például hálózattervezésben is kulcsszerepet játszik. Az Euler-tétel és algoritmikus eszközök segítségével hatékonyan ellenőrizhető egy gráf síkbarajzolhatósága.