Swift Coding Test Course, Binary Graph Discrimination

What is a bipartite graph?
A bipartite graph is a graph whose vertex set can be divided into two mutually exclusive subsets. In other words, it is a division such that all edges of the graph only exist between vertices of the two different sets.
The most common example of a bipartite graph is the “matching” problem. For instance, when matching students to classes, students and classes can be entered as each of the respective sets.
Bipartite graphs have the property that they can always be colored with two colors.

Problem Description

Write a function to determine if the given undirected graph is bipartite.
The given graph is presented in the form of an adjacency list, and the vertices are connected from 0 to n-1.
The function should return true if the graph is bipartite, and false otherwise.

Input Example

    n = 4
    edges = [[0, 1], [0, 3], [1, 2], [2, 3]]
    

Output Example

    false
    

Problem Solving Process

  1. Understanding the Structure of the Graph

    The given graph consists of nodes and edges, with each node connected to other nodes.
    We will represent the graph in an undirected linked list format.
    Many programming languages, including Java and Swift, can implement this structure using arrays or hashmaps.

  2. Properties of Bipartite Graphs and Search Methods

    A bipartite graph can be divided into two sets of vertices,
    where all adjacent vertices must belong to different sets. Utilizing this property, we can employ depth-first search (DFS) or breadth-first search (BFS)
    as an approach to color the graph.

  3. Exploring the Graph Using DFS or BFS

    We start exploring the graph by coloring each vertex.
    Two colors are used (e.g., 1 and -1), and if we revisit a node that is already colored,
    we can determine that it is not a bipartite graph if the colors match.

Code Implementation

We will now implement an algorithm to determine bipartiteness in Swift.


    class Solution {
        func isBipartite(_ graph: [[Int]]) -> Bool {
            let n = graph.count
            var color = Array(repeating: -1, count: n) // -1 means uncolored
            
            for i in 0..<n {="" if="" color[i]="" !="-1" continue="" }="" var="" queue:="" [int]="[i]" while="" !queue.isempty="" let="" node="queue.removeFirst()" for="" neighbor="" in="" graph[node]="" color[neighbor]="=" -1="" -="" color[node]="" queue.append(neighbor)="" else="" return="" false="" true="" <="" code=""></n>
<h2>Examples and Explanation</h2> <p>The above code traverses the given graph, coloring the nodes and checking for re-visits to determine bipartiteness.<br> In the example above, the graph takes the following form:</p> <pre> 0 -- 1 | | 3 -- 2 </pre> <p>In this case, nodes 0 and 1 have different colors, 1 and 2 have different colors, and 2 and 3 have different colors.<br> However, nodes 0 and 3 have the same color, indicating that it is not a bipartite graph.<br> This can be verified through BFS exploration.</p> <h2>Conclusion</h2> <p>In this article, we explained the concept of bipartite graphs and the process of their determination,<br> and we explored how to implement this in Swift.<br> This problem is useful for laying the foundations of algorithms and data structures,<br> and it can be applied in various interview questions.<br> Therefore, understanding bipartite graphs and coloring algorithms deeply through this problem is crucial.</p> <h2>References</h2> <ul> <li><a href="https://en.wikipedia.org/wiki/Bipartite_graph">Wikipedia - Bipartite Graph</a></li> <li><a href="https://leetcode.com/problems/is-graph-bipartite/">LeetCode: Is Graph Bipartite?</a></li> </ul> <p></p> <div id="jp-relatedposts" class="jp-relatedposts"> <h3 class="jp-relatedposts-headline"><em>관련</em></h3> </div>
<footer class="entry-footer"> <span class="byline"><span class="author vcard"><img alt="" src="https://secure.gravatar.com/avatar/5b7f47db621d1eab02540d35048be506?s=49&amp;d=mm&amp;r=g" srcset="https://secure.gravatar.com/avatar/5b7f47db621d1eab02540d35048be506?s=98&amp;d=mm&amp;r=g 2x" class="avatar avatar-49 photo" height="49" width="49" decoding="async"><span class="screen-reader-text">Author </span> <a class="url fn n" href="https://atmokpo.com/w/en/author/root/">root</a></span></span><span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://atmokpo.com/w/34820/" rel="bookmark"><time class="entry-date published" datetime="2024-11-01T09:32:22+00:00">2024/11/01</time><time class="updated" datetime="2024-11-01T11:26:23+00:00">2024/11/01</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://atmokpo.com/w/category/swift-coding-test/" rel="category tag">Swift Coding Test</a></span> </footer><!-- .entry-footer -->
<nav class="navigation post-navigation" aria-label="Posts"> <h2 class="screen-reader-text">Post navigation</h2> <div class="nav-links"><div class="nav-previous"><a href="https://atmokpo.com/w/34818/" rel="prev"><span class="meta-nav" aria-hidden="true">Previous</span> <span class="screen-reader-text">Previous post:</span> <span class="post-title">Swift Coding Test Course, Euclidean Algorithm</span></a></div><div class="nav-next"><a href="https://atmokpo.com/w/34822/" rel="next"><span class="meta-nav" aria-hidden="true">Next</span> <span class="screen-reader-text">Next post:</span> <span class="post-title">Swift Coding Test Course, Binary Search</span></a></div></div> </nav>
<aside id="secondary" class="sidebar widget-area"> <section id="block-2" class="widget widget_block widget_search"><form role="search" method="get" action="https://atmokpo.com/w/en/" class="wp-block-search__button-outside wp-block-search__text-button wp-block-search"><label class="wp-block-search__label" for="wp-block-search__input-1">Search</label><div class="wp-block-search__inside-wrapper "><input class="wp-block-search__input" id="wp-block-search__input-1" placeholder="" value="" type="search" name="s" required=""><button aria-label="Search" class="wp-block-search__button wp-element-button" type="submit">Search</button></div></form></section><section id="block-10" class="widget widget_block"><ul class="wp-block-page-list"><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/c-coding-test-tutorials/">C++ Coding Test Tutorials</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/collection-of-c-coding-test-tutorials/">Collection of C# Coding Test Tutorials</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/deep-learning-automated-trading/">Deep learning Automated trading</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/deep-learning-natural-language-processing/">Deep learning natural language processing</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/english-sentence-study/">English sentence study</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/flutter-course/">Flutter course</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/gan-deep-learning-course/">GAN deep learning course</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/java-android-app-development/">Java Android app development</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/java-coding-test/">Java Coding Test</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/javascript-coding-test/">Javascript Coding Test</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/kotlin-android-app-development/">Kotlin Android app development</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/kotlin-coding-test/">Kotlin coding test</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/python-auto-trading/">Python Auto Trading</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/python-coding-test/">Python Coding Test</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/python-study/">Python Study</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/pytorch-study/">PyTorch Study</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/react-basics-course/">React basics course</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/spring-boot-backend-development/">Spring Boot backend development</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/swift-coding-test/">Swift Coding Test</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/swift-iphone-app-development-swiftui/">Swift iPhone app development (SwiftUI)</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/swift-iphone-app-development-uikit/">Swift iPhone app development (UIKit)</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/unity-basic/">Unity Basic</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/using-hugging-face/">Using Hugging Face</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/uwp-programming/">UWP Programming</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/wpf-programming/">WPF Programming</a></li></ul></section><section id="listcategorypostswidget-3" class="widget widget_listcategorypostswidget"><h2 class="widget-title">Category Post List</h2><ul class="lcp_catlist" id="lcp_instance_listcategorypostswidget-3"><li><a href="https://atmokpo.com/w/34876/">Swift Coding Test Course, Understanding Friend Relationships</a></li><li><a href="https://atmokpo.com/w/34874/">Swift Coding Test Course, Finding the Longest Common Subsequence</a></li><li><a href="https://atmokpo.com/w/34872/">Swift Coding Test Course, Finding Parenthesis Arrangement to Make Minimum Value</a></li><li><a href="https://atmokpo.com/w/34870/">Swift Coding Test Course, Finding Minimum Value 2</a></li><li><a href="https://atmokpo.com/w/34868/">Swift Coding Test Course, Finding Minimum Value 1</a></li><li><a href="https://atmokpo.com/w/34866/">Swift Coding Test Course, Finding Minimum Spanning Tree</a></li><li><a href="https://atmokpo.com/w/34864/">Swift Coding Test Course, Minimum Spanning Tree</a></li><li><a href="https://atmokpo.com/w/34862/">Swift Coding Test Course, Finding Minimum Cost</a></li><li><a href="https://atmokpo.com/w/34860/">Swift Coding Test Course, Finding the Least Common Ancestor 2</a></li><li><a href="https://atmokpo.com/w/34858/">Swift Coding Test Course, Finding the Lowest Common Ancestor 1</a></li></ul><ul class="lcp_paginator"><li><a href="https://atmokpo.com/w/34820/?lcp_pagelistcategorypostswidget-3=2#lcp_instance_listcategorypostswidget-3" title="2" class="lcp_prevlink">&lt;&lt;</a></li><li><a href="https://atmokpo.com/w/34820/?lcp_pagelistcategorypostswidget-3=1#lcp_instance_listcategorypostswidget-3" title="1">1</a></li><li><a href="https://atmokpo.com/w/34820/?lcp_pagelistcategorypostswidget-3=2#lcp_instance_listcategorypostswidget-3" title="2">2</a></li><li class="lcp_currentpage">3</li><li><a href="https://atmokpo.com/w/34820/?lcp_pagelistcategorypostswidget-3=4#lcp_instance_listcategorypostswidget-3" title="4">4</a></li><li><a href="https://atmokpo.com/w/34820/?lcp_pagelistcategorypostswidget-3=5#lcp_instance_listcategorypostswidget-3" title="5">5</a></li><li><a href="https://atmokpo.com/w/34820/?lcp_pagelistcategorypostswidget-3=6#lcp_instance_listcategorypostswidget-3" title="6">6</a></li><li><a href="https://atmokpo.com/w/34820/?lcp_pagelistcategorypostswidget-3=7#lcp_instance_listcategorypostswidget-3" title="7">7</a></li><li><a href="https://atmokpo.com/w/34820/?lcp_pagelistcategorypostswidget-3=8#lcp_instance_listcategorypostswidget-3" title="8">8</a></li><span class="lcp_elipsis">...</span><li><a href="https://atmokpo.com/w/34820/?lcp_pagelistcategorypostswidget-3=14#lcp_instance_listcategorypostswidget-3" title="14">14</a></li><li><a href="https://atmokpo.com/w/34820/?lcp_pagelistcategorypostswidget-3=4#lcp_instance_listcategorypostswidget-3" title="4" class="lcp_nextlink">&gt;&gt;</a></li></ul></section><section id="block-3" class="widget widget_block"> <div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow"> <h3 class="wp-block-heading">최신 글</h3> <ul class="wp-block-latest-posts__list wp-block-latest-posts"><li><a class="wp-block-latest-posts__post-title" href="https://atmokpo.com/w/37979/">Unity 2D Game Development, Create a Platform Game Including Jumps, Obstacles, and Enemies.</a></li> <li><a class="wp-block-latest-posts__post-title" href="https://atmokpo.com/w/37977/">Unity 2D Game Development, Adding Effects Using Particle System Implementing visual effects such as explosions and flames using the particle system.</a></li> <li><a class="wp-block-latest-posts__post-title" href="https://atmokpo.com/w/37973/">Unity 2D Game Development, Touch Input and Mobile Game Development Creation of 2D games utilizing touch input on mobile devices.</a></li> <li><a class="wp-block-latest-posts__post-title" href="https://atmokpo.com/w/37975/">Unity 2D Game Development, Power-Up and Buff System Creating a power-up system that temporarily enhances the player’s abilities.</a></li> <li><a class="wp-block-latest-posts__post-title" href="https://atmokpo.com/w/37971/">Unity 2D Game Development, Quest and Mission System Creating a quest system where rewards are given for achieving specific goals.</a></li> </ul></div></div> </section> </aside><!-- .sidebar .widget-area -->
<footer id="colophon" class="site-footer"> <div class="site-info"> <span class="site-title"><a href="https://atmokpo.com/w/en/" rel="home">라이브스마트</a></span> <a href="https://wordpress.org/" class="imprint"> Proudly powered by WordPress </a> </div><!-- .site-info --> </footer><!-- .site-footer -->
<link rel="stylesheet" id="lcp_paginator-css" href="https://atmokpo.com/w/wp-content/plugins/list-category-posts//lcp_paginator.css?ver=6.7.2" media="all"> <script src="https://atmokpo.com/w/wp-content/plugins/collapse-magic/js/collapse-magic.js?x=258&amp;ver=1.0" id="claps-main-js"></script> <script defer="" src="https://atmokpo.com/w/wp-content/plugins/koko-analytics/assets/dist/js/script.js?ver=1.6.4" id="koko-analytics-js"></script> <script src="https://atmokpo.com/w/wp-content/plugins/responsive-accordion-and-collapse/js/accordion-custom.js?ver=6.7.2" id="call_ac-custom-js-front-js"></script> <script src="https://atmokpo.com/w/wp-content/plugins/responsive-accordion-and-collapse/js/accordion.js?ver=6.7.2" id="call_ac-js-front-js"></script> <script src="https://stats.wp.com/e-202515.js" id="jetpack-stats-js" data-wp-strategy="defer"></script> <script id="jetpack-stats-js-after"> _stq = window._stq || []; _stq.push([ "view", JSON.parse("{\"v\":\"ext\",\"blog\":\"238449126\",\"post\":\"34820\",\"tz\":\"0\",\"srv\":\"atmokpo.com\",\"j\":\"1:14.2.1\"}") ]); _stq.push([ "clickTrackerInit", "238449126", "34820" ]); </script> <script> document.querySelectorAll("code").forEach(function(codeBlock) { // 내용에 '<'나 '>'가 포함된 경우에만 변환 if (codeBlock.innerHTML.includes("<") && codeBlock.innerHTML.includes(">")) { codeBlock.textContent = codeBlock.innerHTML; } }); </script>