Έχω μια μήτρα adjaceny για ένα γράφημα το οποίο παρακολουθεί τις ακμές μεταξύ των κόμβων, έχοντας ένα 1 στην αντίστοιχη adjMat [i, j] = 1? Μέσω αυτής της μήτρας adjaceny εύχομαι να μάθετε όλες τις κλειστές διαδρομές μήκους 4 που υπάρχει στο γράφημα. Μπορεί κάποιος παρακαλώ να μου δώσει έναν κωδικό ψευδο. σε ευχαριστώ
ψευδοκώδικα για την εύρεση κλειστές διαδρομές σε ένα γράφημα
Εφαρμόστε ένα βάθος περιορισμένο βάθος-πρώτα-αναζήτησης σε κάθε κόμβο και ρεκόρ κόμβους όπου η DFS βρίσκει τον κόμβο εκκίνησης. Για την αναζήτηση, δείτε ψευδο-κώδικα εδώ: http://en.wikipedia.org/wiki/Depth-limited_search . Απλά πρέπει να προσθέσω κάτι σαν
if(node' == node && node'.depth==4) memorize(node)
στην αρχή του βρόχου.
Αυτό ακούγεται σαν στο σπίτι, γι 'αυτό δεν θα δώσει το όλο θέμα μακριά. Αλλά εδώ είναι μια υπόδειξη: από τη στιγμή που ενδιαφέρονται για την εξεύρεση κύκλους μήκους 4, πάρτε την 4η εξουσία της πίνακας γειτνίασης και σάρωση κατά μήκος της διαγωνίου. Εάν οποιαδήποτε καταχώρηση Μ [i, i] είναι μη μηδενική, υπάρχει ένας κύκλος που περιέχει κορυφή i.
Ίσως δεν είναι ο βέλτιστος τρόπος για να το (είναι υπολογίσουμε O(n^4)), αλλά ένας πολύ απλός τρόπος είναι να σαρώσει μέσα από τις όλες τις κορυφές
a, b, c, d such that b > a, c > b, d > c
Μπορείτε να ελέγξετε στη συνέχεια, ελέγξτε για κάθε ένα από τους ακόλουθους κύκλους:
1. ([α, b] && [b, c] && [c, d] && [d, α]) 2. ([α, b] && [b, d] && [d, c] && [c, a]) 3. ([α, d] && [d, b] && [b, c] && [c, a]) 1: 2: 3: Α --- Β Α --- ΒΑΒ | | \ / | \ / | | | X | X | | | / \ | / \ | D --- C D --- CCD
Είσαι ουσιαστικά τον έλεγχο κάθε διέταξε σύνολο των κορυφών (α, β, γ, δ) για τους 3 τρόπους που θα μπορούσαν να σχηματίσουν έναν κύκλο.
Έτσι, ο κώδικας ψευδο θα είναι:
for a = 0 to <lastVertex>
for b = a + 1 to <lastVertex>
for c = b + 1 to <lastVertex>
for d = c + 1 to <lastVertex>
if(IsCycle(a,b,c,d)) AddToList([a,b,c,d])
if(IsCycle(a,b,d,c)) AddToList([a,b,d,c])
if(IsCycle(a,c,b,d)) AddToList([a,c,b,d])
next d
next c
next b
next a













