Comment savoir si un graphe est biparti?
J'ai essayé de comprendre le graphe biparti. À ma connaissance c'est un graphe G qui peut être divisée en deux sousgraphes U et V. de Sorte que l'intersection de U et V est une série null et l'union est graphe G.
J'essaie de savoir si un graphe est biparti ou non à l'aide de BFS. Ce n'est pas encore clair pour moi que comment pouvons-nous trouver ce à l'aide de BFS.
Disons que nous avons graphe défini comme ci-dessous.
a:e,f
b:e
c:e,f,h
d:g,h
e:a,b,c
f:a,c,g
g:f,d
h:c,d
Ce dont j'ai besoin ici est l'explication étape par étape de la façon dont ce graphe est biparti ou non à l'aide de BFS.
Qu'entendez-vous par l'intersection de deux sousgraphes? Autant que je sache, un graphe biparti est un graphe dont les sommets peuvent être partitionné en deux ensembles avec tous les bords de départ dans un jeu et se terminant dans un autre.
Comme pour le BFS, vous pouvez démarrer à partir d'un sommet, de couleur bleu, puis la couleur de l'ensemble de ses voisins rouge, puis passez par les voisins, les voisins et de les colorer de tous les bleus de nouveau et ainsi de suite. Si vous rencontrez un nœud déjà coloré et c'est un autre que vous avez besoin de fixer, le graphique n'est pas bipartite.
Je voulais dire la même chose. deux ensembles sont les deux sousgraphes et l'intersection est une série NULL qui prend en charge la biparity qu'un sommet ne peut pas être dans deux séries en même temps.Si il l'est, il n'est pas un graphe biparti.
Vous pouvez dédoublement tout sommet définir en deux ensembles disjoints, un graphique est biparti si vous pouvez faire sans avoir une arête entre les deux sommets de la même partition.
Comme pour le BFS, vous pouvez démarrer à partir d'un sommet, de couleur bleu, puis la couleur de l'ensemble de ses voisins rouge, puis passez par les voisins, les voisins et de les colorer de tous les bleus de nouveau et ainsi de suite. Si vous rencontrez un nœud déjà coloré et c'est un autre que vous avez besoin de fixer, le graphique n'est pas bipartite.
Je voulais dire la même chose. deux ensembles sont les deux sousgraphes et l'intersection est une série NULL qui prend en charge la biparity qu'un sommet ne peut pas être dans deux séries en même temps.Si il l'est, il n'est pas un graphe biparti.
Vous pouvez dédoublement tout sommet définir en deux ensembles disjoints, un graphique est biparti si vous pouvez faire sans avoir une arête entre les deux sommets de la même partition.
OriginalL'auteur user2738777 | 2015-05-27
Vous devez vous connecter pour publier un commentaire.
Prises de GeeksforGeeks
Qui suit est un algorithme simple pour savoir si un graphe est Birpartite ou non à l'aide de Largeur de Recherche (BFS) :-
Aussi, REMARQUE :-
-> Il est possible de la couleur d'un cycle de graphique avec le même cycle à l'aide de deux couleurs.
-> Il n'est pas possible de la couleur d'un cycle de graphique avec odd cycle à l'aide de deux couleurs.
EDIT :-
Si un graphe n'est pas connecté, il peut ont plus d'un dédoublement. Vous devez vérifier que tous les composants séparément avec l'algorithme comme mentionné ci-dessus.
Donc, pour divers déconnecté sous-graphe de la même graphe, vous devez effectuer ce dédoublement vérifier sur chacun d'eux séparément à l'aide du même algorithme discuté ci-dessus. Tous ceux divers déconnecté sous-graphe de la même graphe en compte de son propre jeu de dédoublement.
Et, le graphique sera appelé bipartite, SI ET SEULEMENT SI chacune de ses composantes connexes sont révélés être bipartite .
votre commentaire est faux. un graphe w/o bords est vacuously bipartite, sine chaque bord dans il répond à la condition d'être connecté à deux composants.
Vous avez seulement besoin de chaque composant connecté à être bipartite, puis l'union de leur est également bipartite.,
Bien sûr ... mais la possibilité de sans lien composantes doivent être prises en compte dans l'algorithme. Je ne vois pas de provision pour les non-connectés composants dans l'algorithme proposé.
Le problème est que l'algorithme que vous avez décrit est pas un algorithme général pour détecter bipartiteness, parce que, il échoue sur des graphes avec plus d'un composant. -1 jusqu'à ce que vous mettez à jour votre (très bon) pour répondre à cette.
OriginalL'auteur Am_I_Helpful
De L'Université Carnegie Mellon:
(source: http://www.cs.cmu.edu/~15251/devoirs/hw5.pdf)
Êtes-vous sûr que vous devez utiliser BFS? Déterminer si un graphe si bipartite nécessite la détection de la durée du cycle, et DFS est probablement mieux pour le cycle de détection de BFS.
De toute façon, un graphique si biparti si et seulement si elle n'a pas de cycles de longueur impaire. Si vous êtes autorisé à l'utiliser DFS, vous pouvez DFS sur le graphique et vérifier le dos-bords pour détecter la présence de cycles et de l'utilisation DFS horodateurs pour calculer la taille de chaque cycle.
Juste point de. Mais plus important encore, avez-vous vraiment besoin d'utiliser BFS plus de DFS?
OriginalL'auteur Xceptional
Ici est un Prologue de CLP(FD) solution. Juste le modèle de chaque arête dans le graphe en tant que variable dans le domaine 0..1. Ensuite, le modèle de chaque sommet comme une équation:
Ensuite question de l'étiquetage. Si l'étiquetage trouve une solution, vous avez terminé. Il pourrait trouver de multiples solutions. Ici est un terme pour votre exemple:
Travaille également en GNU Prolog, SICStus Prolog, Jekejeke Minlog etc.. surtout avec tout Prolog système qui met en œuvre le règlement CLP(FD). Peut également utiliser CLP(B) ou dif/2.
OriginalL'auteur j4n bur53
Faire un Arbre bfs.Si il y a des arêtes entre les sommets du même niveau de l'arbre.Alors le graphe est non bipartite,sinon il est biparti.
OriginalL'auteur ashu beckham
Ce qui suit est une BFS approche pour vérifier si le graphe est biparti.
c = 0
x
et définirx.class = c
ys
être les nœuds obtenus par BFSc = 1-c
y
dansys
ensembley.class = c
y
dansys
a un voisinz
avecz.class == c
alors le graphe n'est pas bipartiteCela suppose que le graphe est une seule composante connexe, si elle n'est pas, il suffit de faire cette procédure pour chaque composant.
OriginalL'auteur mitchus
vous pouvez consulter ce lien comme indiqué ci-dessous
ce code contient Vérifier si un graphe est Biparti ou non à l'aide de BFS Algorithme
https://github.com/gangwar-yogendra/Graph/blob/master/BipartiteGraphUsingBFS.c
OriginalL'auteur Yogendra Kumar
Faire plus simple.
Exécuter la composante fortement connexe de l'algorithme.
Si tout nœud de metagraph obtenu a plus de deux sommets alors le graphe n'est pas bipartite.
OriginalL'auteur Gurman SIngh