simple graph directed graph weighted graph complete graph bipartite graph planar graph Euler’s formula graph theory paths