Γράφοι

Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr

Ορισμοί

Παράσταση

Ένας γράφος μπορεί εύκολα να παρασταθεί με δύο διαφορετικούς τρόπους:
  1. πίνακα γειτνίασης (adjacency matrix).
  2. λίστα γειτνίασης (adjacency list).
Και οι δύο τρόποι προϋποθέτουν ένα μονοσήμαντο σύστημα αρίθμησης των κόμβων.

Πίνακας γειτνίασης

Σε έναν γράφο με ν κόμβους ο πίνακας ν*ν γειτνίασης περιέχει 1 στις θέσεις (κ,λ) όπου υπάρχει ακμή από τον κόμβο κ στον κόμβο λ.

Λίστα γειτνίασης

Κάθε κόμβος συσχετίζεται με μια συνδεδεμένη λίστα γειτνίασης η οποία περιέχει τα ονόματα των άλλων κόμβων με τους οποίους συνδέεται ο συγκεκριμένος κόμβος. Οι λίστες για όλους τους κόμβους ν μπορούν να ξεκινούν από έναν μονοδιάστατο πίνακα μήκους ν ή από μια άλλη συνδεδεμένη λίστα.

Υλοποίηση σε Pascal

Πίνακας γειτνίασης

program matrixGraph;

const
    n = 10;	(* Number of nodes *)

var
    graph = array [1..n,1..n] of boolean;

...

Λίστα γειτνίασης

program listGraph;

const
    n = 10;	(* Number of nodes *)

type
    adjList = ^adjListElem;

    adjListElem = record
        node : integer;
        next : adjList;
    end;

var
    graph = array [1..n] of adjList;

...

Πρόσθετοι ορισμοί

Προτάσεις σε συνεκτικούς μη κυκλικούς γράφους

Οι παρακάτω προτάσεις είναι ισοδύναμες για πεπερασμένους γράφους με ν > 0 κόμβους:
  1. Ο γράφος Γ είναι συνεκτικός και μη κυκλικός.
  2. Αν διαγραφεί οποιαδήποτε ακμή ο γράφος θα πάψει να είναι συνεκτικός.
  3. Δύο διαφορετικοί κόμβοι συνδέονται από μια και μόνο μια απλή διαδρομή.
  4. Ο γράφος είναι μη κυκλικός και περιέχει ν - 1 ακμές.
  5. Ο γράφος είναι συνεκτικός και περιέχει ν - 1 ακμές.

Ψάξιμο κατά βάθος

Για να επισκευθούμε όλους τους κόμβους ενός γράφου με ν κόμβους χρειαζόμαστε έναν πίνακα λογικών μεταβλητών μιας διάστασης και μήκους ν ο οποίος περιέχει την τιμή "αληθές" για τους κόμβους τους οποίους έχουμε επισκευθεί. Η συστηματική επίσκεψη όλων των κόμβων γίνεται σύμφωνα με τα παρακάτω βήματα:
  1. Φυλάμε την τιμή "ψευδές" στον πίνακα επισκέψεων.
  2. Επισκεπτόμαστε όλους τους κόμβους που δεν έχουμε επισκευτεί.

Η επίσκεψη ενός κόμβου γίνεται σύμφωνα με τα παρακάτω βήματα:
  1. Σημειώνουμε στον πίνακα ότι έχουμε επισκευθεί τον κόμβο.
  2. Επισκεπτόμαστε όλους τους συνδεδεμένους κόμβους που δεν έχουμε επισκευθεί.
Ο παραπάνω αλγόριμος για γράφο Κ κόμβων και Α ακμών απαιτεί:

Εφαρμογές

Βιβλιογραφία

Ασκήσεις

Άσκηση ADS06

  1. Να υλοποιηθεί σε Pascal πρόγραμμα το οποίο διαβάζει ζεύγη συνδεδεμένων κόμβων ενός γράφου ακεραίων μέχρι να συναντήσει το ζεύγος (0,0) και στη συνέχεια επισκέπτεται κατά βάθος όλους τους κόμβους και τυπώνει τον αριθμό τους στο τέλος της διαδικασίας επίσκεψης.

    Παράδειγμα:

    5 3
    5 2
    0 2
    4 0
    0 5
    1 6
    1 5
    0 0
    
    
    2
    3
    5
    0
    6
    1
    
    Αριθμήστε στην τύχη όλα τα ρούχα σας (π.χ. παπούτσια = 1, κάλτσες = 6) και εκφράστε την έννοια ότι για να φορέσετε το Α πρέπει να έχετε φορέσει το Β ως ένα ζεύγος (Α, Β) (π.χ. 1 6). Δώστε όλα τα ζεύγη που εκφράζουν τις ανάγκες σας για να ντυθείτε με λογικό τρόπο και ελέγξτε την σειρά ενδυμασίας που προτείνει το πρόγραμμα. (Η ταξινόμιση αυτή ονομάζεται τοπολογική ταξινόμιση (topological sorting)).
Περισσότερες λεπτομέρειες για τις ασκήσεις