Skip to content
Merged
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
ffa6738
Create dijkstra_algorithm.py
debnath003 Oct 2, 2023
6a04fce
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
8faba24
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
8521a6b
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
e0da2c3
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
934272e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
c2e4771
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
df722eb
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
2888c8b
Delete greedy_methods/dijkstra_algorithm.py
debnath003 Oct 2, 2023
1de4cb5
Update check_bipartite_graph_dfs.py
debnath003 Oct 2, 2023
5857640
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
4d4bb3e
Update check_bipartite_graph_dfs.py
debnath003 Oct 2, 2023
307388b
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
b7522ba
Update graphs/check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
8f46b7f
Update graphs/check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
81d6e00
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
2f62202
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
55a384e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 4, 2023
74b0d5b
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
10a5d0e
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
afd7c07
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 4, 2023
9b949a0
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
779ccf0
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
6d5ed2a
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
272d924
Let's use self-documenting variable names
cclauss Oct 5, 2023
498438b
Update check_bipartite_graph_dfs.py
cclauss Oct 5, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 47 additions & 26 deletions graphs/check_bipartite_graph_dfs.py
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,55 @@
# Check whether Graph is Bipartite or Not using DFS
from collections import defaultdict


# A Bipartite Graph is a graph whose vertices can be divided into two independent sets,
# U and V such that every edge (u, v) either connects a vertex from U to V or a vertex
# from V to U. In other words, for every edge (u, v), either u belongs to U and v to V,
# or u belongs to V and v to U. We can also say that there is no edge that connects
# vertices of same set.
def check_bipartite_dfs(graph):
visited = [False] * len(graph)
color = [-1] * len(graph)
def is_bipartite(graph: defaultdict[int, list[int]]) -> bool:
"""
Check whether a graph is Bipartite or not using Depth-First Search (DFS).

def dfs(v, c):
visited[v] = True
color[v] = c
for u in graph[v]:
if not visited[u]:
dfs(u, 1 - c)
A Bipartite Graph is a graph whose vertices can be divided into two independent
sets, U and V such that every edge (u, v) either connects a vertex from
U to V or a vertex from V to U. In other words, for every edge (u, v),
either u belongs to U and v to V, or u belongs to V and v to U. There is
no edge that connects vertices of the same set.

for i in range(len(graph)):
if not visited[i]:
dfs(i, 0)
Args:
graph: An adjacency list representing the graph.

for i in range(len(graph)):
for j in graph[i]:
if color[i] == color[j]:
return False
Returns:
True if there's no edge that connects vertices of the same set, False otherwise.

return True
Examples:
>>> is_bipartite(
... defaultdict(list, {0: [1, 2], 1: [0, 3], 2: [0, 4], 3: [1], 4: [2]})
... )
False
>>> is_bipartite(defaultdict(list, {0: [1, 2], 1: [0, 2], 2: [0, 1]}))
True
"""

def depth_first_search(node: int, color: int) -> bool:
visited[node] = color
return any(
visited[neighbour] == color
or (
visited[neighbour] == -1
and not depth_first_search(neighbour, 1 - color)
)
for neighbour in graph[node]
)

# Adjacency list of graph
graph = {0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: []}
print(check_bipartite_dfs(graph))
visited: defaultdict[int, int] = defaultdict(lambda: -1)

return all(
not (visited[node] == -1 and not depth_first_search(node, 0)) for node in graph
)


if __name__ == "__main__":
import doctest

result = doctest.testmod()

if result.failed:
print(f"{result.failed} test(s) failed.")
else:
print("All tests passed!")
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Updated check_bipartite_graph_dfs.py by debnath003 · Pull Request #9525 · TheAlgorithms/Python · GitHub
Skip to content
Merged
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
ffa6738
Create dijkstra_algorithm.py
debnath003 Oct 2, 2023
6a04fce
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
8faba24
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
8521a6b
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
e0da2c3
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
934272e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
c2e4771
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
df722eb
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
2888c8b
Delete greedy_methods/dijkstra_algorithm.py
debnath003 Oct 2, 2023
1de4cb5
Update check_bipartite_graph_dfs.py
debnath003 Oct 2, 2023
5857640
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
4d4bb3e
Update check_bipartite_graph_dfs.py
debnath003 Oct 2, 2023
307388b
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
b7522ba
Update graphs/check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
8f46b7f
Update graphs/check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
81d6e00
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
2f62202
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
55a384e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 4, 2023
74b0d5b
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
10a5d0e
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
afd7c07
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 4, 2023
9b949a0
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
779ccf0
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
6d5ed2a
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
272d924
Let's use self-documenting variable names
cclauss Oct 5, 2023
498438b
Update check_bipartite_graph_dfs.py
cclauss Oct 5, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 47 additions & 26 deletions graphs/check_bipartite_graph_dfs.py
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,55 @@
# Check whether Graph is Bipartite or Not using DFS
from collections import defaultdict


# A Bipartite Graph is a graph whose vertices can be divided into two independent sets,
# U and V such that every edge (u, v) either connects a vertex from U to V or a vertex
# from V to U. In other words, for every edge (u, v), either u belongs to U and v to V,
# or u belongs to V and v to U. We can also say that there is no edge that connects
# vertices of same set.
def check_bipartite_dfs(graph):
visited = [False] * len(graph)
color = [-1] * len(graph)
def is_bipartite(graph: defaultdict[int, list[int]]) -> bool:
"""
Check whether a graph is Bipartite or not using Depth-First Search (DFS).

def dfs(v, c):
visited[v] = True
color[v] = c
for u in graph[v]:
if not visited[u]:
dfs(u, 1 - c)
A Bipartite Graph is a graph whose vertices can be divided into two independent
sets, U and V such that every edge (u, v) either connects a vertex from
U to V or a vertex from V to U. In other words, for every edge (u, v),
either u belongs to U and v to V, or u belongs to V and v to U. There is
no edge that connects vertices of the same set.

for i in range(len(graph)):
if not visited[i]:
dfs(i, 0)
Args:
graph: An adjacency list representing the graph.

for i in range(len(graph)):
for j in graph[i]:
if color[i] == color[j]:
return False
Returns:
True if there's no edge that connects vertices of the same set, False otherwise.

return True
Examples:
>>> is_bipartite(
... defaultdict(list, {0: [1, 2], 1: [0, 3], 2: [0, 4], 3: [1], 4: [2]})
... )
False
>>> is_bipartite(defaultdict(list, {0: [1, 2], 1: [0, 2], 2: [0, 1]}))
True
"""

def depth_first_search(node: int, color: int) -> bool:
visited[node] = color
return any(
visited[neighbour] == color
or (
visited[neighbour] == -1
and not depth_first_search(neighbour, 1 - color)
)
for neighbour in graph[node]
)

# Adjacency list of graph
graph = {0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: []}
print(check_bipartite_dfs(graph))
visited: defaultdict[int, int] = defaultdict(lambda: -1)

return all(
not (visited[node] == -1 and not depth_first_search(node, 0)) for node in graph
)


if __name__ == "__main__":
import doctest

result = doctest.testmod()

if result.failed:
print(f"{result.failed} test(s) failed.")
else:
print("All tests passed!")
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Updated check_bipartite_graph_dfs.py by debnath003 · Pull Request #9525 · TheAlgorithms/Python · GitHub
Skip to content
Merged
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
ffa6738
Create dijkstra_algorithm.py
debnath003 Oct 2, 2023
6a04fce
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
8faba24
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
8521a6b
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
e0da2c3
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
934272e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
c2e4771
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
df722eb
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
2888c8b
Delete greedy_methods/dijkstra_algorithm.py
debnath003 Oct 2, 2023
1de4cb5
Update check_bipartite_graph_dfs.py
debnath003 Oct 2, 2023
5857640
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
4d4bb3e
Update check_bipartite_graph_dfs.py
debnath003 Oct 2, 2023
307388b
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
b7522ba
Update graphs/check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
8f46b7f
Update graphs/check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
81d6e00
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
2f62202
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
55a384e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 4, 2023
74b0d5b
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
10a5d0e
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
afd7c07
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 4, 2023
9b949a0
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
779ccf0
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
6d5ed2a
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
272d924
Let's use self-documenting variable names
cclauss Oct 5, 2023
498438b
Update check_bipartite_graph_dfs.py
cclauss Oct 5, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 47 additions & 26 deletions graphs/check_bipartite_graph_dfs.py
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,55 @@
# Check whether Graph is Bipartite or Not using DFS
from collections import defaultdict


# A Bipartite Graph is a graph whose vertices can be divided into two independent sets,
# U and V such that every edge (u, v) either connects a vertex from U to V or a vertex
# from V to U. In other words, for every edge (u, v), either u belongs to U and v to V,
# or u belongs to V and v to U. We can also say that there is no edge that connects
# vertices of same set.
def check_bipartite_dfs(graph):
visited = [False] * len(graph)
color = [-1] * len(graph)
def is_bipartite(graph: defaultdict[int, list[int]]) -> bool:
"""
Check whether a graph is Bipartite or not using Depth-First Search (DFS).

def dfs(v, c):
visited[v] = True
color[v] = c
for u in graph[v]:
if not visited[u]:
dfs(u, 1 - c)
A Bipartite Graph is a graph whose vertices can be divided into two independent
sets, U and V such that every edge (u, v) either connects a vertex from
U to V or a vertex from V to U. In other words, for every edge (u, v),
either u belongs to U and v to V, or u belongs to V and v to U. There is
no edge that connects vertices of the same set.

for i in range(len(graph)):
if not visited[i]:
dfs(i, 0)
Args:
graph: An adjacency list representing the graph.

for i in range(len(graph)):
for j in graph[i]:
if color[i] == color[j]:
return False
Returns:
True if there's no edge that connects vertices of the same set, False otherwise.

return True
Examples:
>>> is_bipartite(
... defaultdict(list, {0: [1, 2], 1: [0, 3], 2: [0, 4], 3: [1], 4: [2]})
... )
False
>>> is_bipartite(defaultdict(list, {0: [1, 2], 1: [0, 2], 2: [0, 1]}))
True
"""

def depth_first_search(node: int, color: int) -> bool:
visited[node] = color
return any(
visited[neighbour] == color
or (
visited[neighbour] == -1
and not depth_first_search(neighbour, 1 - color)
)
for neighbour in graph[node]
)

# Adjacency list of graph
graph = {0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: []}
print(check_bipartite_dfs(graph))
visited: defaultdict[int, int] = defaultdict(lambda: -1)

return all(
not (visited[node] == -1 and not depth_first_search(node, 0)) for node in graph
)


if __name__ == "__main__":
import doctest

result = doctest.testmod()

if result.failed:
print(f"{result.failed} test(s) failed.")
else:
print("All tests passed!")
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Updated check_bipartite_graph_dfs.py by debnath003 · Pull Request #9525 · TheAlgorithms/Python · GitHub
Skip to content
Merged
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
ffa6738
Create dijkstra_algorithm.py
debnath003 Oct 2, 2023
6a04fce
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
8faba24
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
8521a6b
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
e0da2c3
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
934272e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
c2e4771
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
df722eb
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
2888c8b
Delete greedy_methods/dijkstra_algorithm.py
debnath003 Oct 2, 2023
1de4cb5
Update check_bipartite_graph_dfs.py
debnath003 Oct 2, 2023
5857640
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
4d4bb3e
Update check_bipartite_graph_dfs.py
debnath003 Oct 2, 2023
307388b
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
b7522ba
Update graphs/check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
8f46b7f
Update graphs/check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
81d6e00
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
2f62202
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
55a384e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 4, 2023
74b0d5b
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
10a5d0e
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
afd7c07
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 4, 2023
9b949a0
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
779ccf0
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
6d5ed2a
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
272d924
Let's use self-documenting variable names
cclauss Oct 5, 2023
498438b
Update check_bipartite_graph_dfs.py
cclauss Oct 5, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 47 additions & 26 deletions graphs/check_bipartite_graph_dfs.py
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,55 @@
# Check whether Graph is Bipartite or Not using DFS
from collections import defaultdict


# A Bipartite Graph is a graph whose vertices can be divided into two independent sets,
# U and V such that every edge (u, v) either connects a vertex from U to V or a vertex
# from V to U. In other words, for every edge (u, v), either u belongs to U and v to V,
# or u belongs to V and v to U. We can also say that there is no edge that connects
# vertices of same set.
def check_bipartite_dfs(graph):
visited = [False] * len(graph)
color = [-1] * len(graph)
def is_bipartite(graph: defaultdict[int, list[int]]) -> bool:
"""
Check whether a graph is Bipartite or not using Depth-First Search (DFS).

def dfs(v, c):
visited[v] = True
color[v] = c
for u in graph[v]:
if not visited[u]:
dfs(u, 1 - c)
A Bipartite Graph is a graph whose vertices can be divided into two independent
sets, U and V such that every edge (u, v) either connects a vertex from
U to V or a vertex from V to U. In other words, for every edge (u, v),
either u belongs to U and v to V, or u belongs to V and v to U. There is
no edge that connects vertices of the same set.

for i in range(len(graph)):
if not visited[i]:
dfs(i, 0)
Args:
graph: An adjacency list representing the graph.

for i in range(len(graph)):
for j in graph[i]:
if color[i] == color[j]:
return False
Returns:
True if there's no edge that connects vertices of the same set, False otherwise.

return True
Examples:
>>> is_bipartite(
... defaultdict(list, {0: [1, 2], 1: [0, 3], 2: [0, 4], 3: [1], 4: [2]})
... )
False
>>> is_bipartite(defaultdict(list, {0: [1, 2], 1: [0, 2], 2: [0, 1]}))
True
"""

def depth_first_search(node: int, color: int) -> bool:
visited[node] = color
return any(
visited[neighbour] == color
or (
visited[neighbour] == -1
and not depth_first_search(neighbour, 1 - color)
)
for neighbour in graph[node]
)

# Adjacency list of graph
graph = {0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: []}
print(check_bipartite_dfs(graph))
visited: defaultdict[int, int] = defaultdict(lambda: -1)

return all(
not (visited[node] == -1 and not depth_first_search(node, 0)) for node in graph
)


if __name__ == "__main__":
import doctest

result = doctest.testmod()

if result.failed:
print(f"{result.failed} test(s) failed.")
else:
print("All tests passed!")
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Updated check_bipartite_graph_dfs.py by debnath003 · Pull Request #9525 · TheAlgorithms/Python · GitHub
Skip to content
Merged
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
ffa6738
Create dijkstra_algorithm.py
debnath003 Oct 2, 2023
6a04fce
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
8faba24
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
8521a6b
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
e0da2c3
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
934272e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
c2e4771
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
df722eb
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
2888c8b
Delete greedy_methods/dijkstra_algorithm.py
debnath003 Oct 2, 2023
1de4cb5
Update check_bipartite_graph_dfs.py
debnath003 Oct 2, 2023
5857640
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
4d4bb3e
Update check_bipartite_graph_dfs.py
debnath003 Oct 2, 2023
307388b
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
b7522ba
Update graphs/check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
8f46b7f
Update graphs/check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
81d6e00
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
2f62202
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
55a384e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 4, 2023
74b0d5b
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
10a5d0e
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
afd7c07
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 4, 2023
9b949a0
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
779ccf0
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
6d5ed2a
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
272d924
Let's use self-documenting variable names
cclauss Oct 5, 2023
498438b
Update check_bipartite_graph_dfs.py
cclauss Oct 5, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 47 additions & 26 deletions graphs/check_bipartite_graph_dfs.py
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,55 @@
# Check whether Graph is Bipartite or Not using DFS
from collections import defaultdict


# A Bipartite Graph is a graph whose vertices can be divided into two independent sets,
# U and V such that every edge (u, v) either connects a vertex from U to V or a vertex
# from V to U. In other words, for every edge (u, v), either u belongs to U and v to V,
# or u belongs to V and v to U. We can also say that there is no edge that connects
# vertices of same set.
def check_bipartite_dfs(graph):
visited = [False] * len(graph)
color = [-1] * len(graph)
def is_bipartite(graph: defaultdict[int, list[int]]) -> bool:
"""
Check whether a graph is Bipartite or not using Depth-First Search (DFS).

def dfs(v, c):
visited[v] = True
color[v] = c
for u in graph[v]:
if not visited[u]:
dfs(u, 1 - c)
A Bipartite Graph is a graph whose vertices can be divided into two independent
sets, U and V such that every edge (u, v) either connects a vertex from
U to V or a vertex from V to U. In other words, for every edge (u, v),
either u belongs to U and v to V, or u belongs to V and v to U. There is
no edge that connects vertices of the same set.

for i in range(len(graph)):
if not visited[i]:
dfs(i, 0)
Args:
graph: An adjacency list representing the graph.

for i in range(len(graph)):
for j in graph[i]:
if color[i] == color[j]:
return False
Returns:
True if there's no edge that connects vertices of the same set, False otherwise.

return True
Examples:
>>> is_bipartite(
... defaultdict(list, {0: [1, 2], 1: [0, 3], 2: [0, 4], 3: [1], 4: [2]})
... )
False
>>> is_bipartite(defaultdict(list, {0: [1, 2], 1: [0, 2], 2: [0, 1]}))
True
"""

def depth_first_search(node: int, color: int) -> bool:
visited[node] = color
return any(
visited[neighbour] == color
or (
visited[neighbour] == -1
and not depth_first_search(neighbour, 1 - color)
)
for neighbour in graph[node]
)

# Adjacency list of graph
graph = {0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: []}
print(check_bipartite_dfs(graph))
visited: defaultdict[int, int] = defaultdict(lambda: -1)

return all(
not (visited[node] == -1 and not depth_first_search(node, 0)) for node in graph
)


if __name__ == "__main__":
import doctest

result = doctest.testmod()

if result.failed:
print(f"{result.failed} test(s) failed.")
else:
print("All tests passed!")
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Updated check_bipartite_graph_dfs.py by debnath003 · Pull Request #9525 · TheAlgorithms/Python · GitHub
Skip to content
Merged
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
ffa6738
Create dijkstra_algorithm.py
debnath003 Oct 2, 2023
6a04fce
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
8faba24
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
8521a6b
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
e0da2c3
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
934272e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
c2e4771
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
df722eb
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
2888c8b
Delete greedy_methods/dijkstra_algorithm.py
debnath003 Oct 2, 2023
1de4cb5
Update check_bipartite_graph_dfs.py
debnath003 Oct 2, 2023
5857640
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
4d4bb3e
Update check_bipartite_graph_dfs.py
debnath003 Oct 2, 2023
307388b
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
b7522ba
Update graphs/check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
8f46b7f
Update graphs/check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
81d6e00
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
2f62202
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
55a384e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 4, 2023
74b0d5b
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
10a5d0e
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
afd7c07
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 4, 2023
9b949a0
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
779ccf0
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
6d5ed2a
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
272d924
Let's use self-documenting variable names
cclauss Oct 5, 2023
498438b
Update check_bipartite_graph_dfs.py
cclauss Oct 5, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 47 additions & 26 deletions graphs/check_bipartite_graph_dfs.py
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,55 @@
# Check whether Graph is Bipartite or Not using DFS
from collections import defaultdict


# A Bipartite Graph is a graph whose vertices can be divided into two independent sets,
# U and V such that every edge (u, v) either connects a vertex from U to V or a vertex
# from V to U. In other words, for every edge (u, v), either u belongs to U and v to V,
# or u belongs to V and v to U. We can also say that there is no edge that connects
# vertices of same set.
def check_bipartite_dfs(graph):
visited = [False] * len(graph)
color = [-1] * len(graph)
def is_bipartite(graph: defaultdict[int, list[int]]) -> bool:
"""
Check whether a graph is Bipartite or not using Depth-First Search (DFS).

def dfs(v, c):
visited[v] = True
color[v] = c
for u in graph[v]:
if not visited[u]:
dfs(u, 1 - c)
A Bipartite Graph is a graph whose vertices can be divided into two independent
sets, U and V such that every edge (u, v) either connects a vertex from
U to V or a vertex from V to U. In other words, for every edge (u, v),
either u belongs to U and v to V, or u belongs to V and v to U. There is
no edge that connects vertices of the same set.

for i in range(len(graph)):
if not visited[i]:
dfs(i, 0)
Args:
graph: An adjacency list representing the graph.

for i in range(len(graph)):
for j in graph[i]:
if color[i] == color[j]:
return False
Returns:
True if there's no edge that connects vertices of the same set, False otherwise.

return True
Examples:
>>> is_bipartite(
... defaultdict(list, {0: [1, 2], 1: [0, 3], 2: [0, 4], 3: [1], 4: [2]})
... )
False
>>> is_bipartite(defaultdict(list, {0: [1, 2], 1: [0, 2], 2: [0, 1]}))
True
"""

def depth_first_search(node: int, color: int) -> bool:
visited[node] = color
return any(
visited[neighbour] == color
or (
visited[neighbour] == -1
and not depth_first_search(neighbour, 1 - color)
)
for neighbour in graph[node]
)

# Adjacency list of graph
graph = {0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: []}
print(check_bipartite_dfs(graph))
visited: defaultdict[int, int] = defaultdict(lambda: -1)

return all(
not (visited[node] == -1 and not depth_first_search(node, 0)) for node in graph
)


if __name__ == "__main__":
import doctest

result = doctest.testmod()

if result.failed:
print(f"{result.failed} test(s) failed.")
else:
print("All tests passed!")
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); Updated check_bipartite_graph_dfs.py by debnath003 · Pull Request #9525 · TheAlgorithms/Python · GitHub
Skip to content
Merged
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
ffa6738
Create dijkstra_algorithm.py
debnath003 Oct 2, 2023
6a04fce
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
8faba24
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
8521a6b
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
e0da2c3
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
934272e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
c2e4771
Update dijkstra_algorithm.py
debnath003 Oct 2, 2023
df722eb
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
2888c8b
Delete greedy_methods/dijkstra_algorithm.py
debnath003 Oct 2, 2023
1de4cb5
Update check_bipartite_graph_dfs.py
debnath003 Oct 2, 2023
5857640
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
4d4bb3e
Update check_bipartite_graph_dfs.py
debnath003 Oct 2, 2023
307388b
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2023
b7522ba
Update graphs/check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
8f46b7f
Update graphs/check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
81d6e00
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
2f62202
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
55a384e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 4, 2023
74b0d5b
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
10a5d0e
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
afd7c07
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 4, 2023
9b949a0
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
779ccf0
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
6d5ed2a
Update check_bipartite_graph_dfs.py
debnath003 Oct 4, 2023
272d924
Let's use self-documenting variable names
cclauss Oct 5, 2023
498438b
Update check_bipartite_graph_dfs.py
cclauss Oct 5, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 47 additions & 26 deletions graphs/check_bipartite_graph_dfs.py
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,55 @@
# Check whether Graph is Bipartite or Not using DFS
from collections import defaultdict


# A Bipartite Graph is a graph whose vertices can be divided into two independent sets,
# U and V such that every edge (u, v) either connects a vertex from U to V or a vertex
# from V to U. In other words, for every edge (u, v), either u belongs to U and v to V,
# or u belongs to V and v to U. We can also say that there is no edge that connects
# vertices of same set.
def check_bipartite_dfs(graph):
visited = [False] * len(graph)
color = [-1] * len(graph)
def is_bipartite(graph: defaultdict[int, list[int]]) -> bool:
"""
Check whether a graph is Bipartite or not using Depth-First Search (DFS).

def dfs(v, c):
visited[v] = True
color[v] = c
for u in graph[v]:
if not visited[u]:
dfs(u, 1 - c)
A Bipartite Graph is a graph whose vertices can be divided into two independent
sets, U and V such that every edge (u, v) either connects a vertex from
U to V or a vertex from V to U. In other words, for every edge (u, v),
either u belongs to U and v to V, or u belongs to V and v to U. There is
no edge that connects vertices of the same set.

for i in range(len(graph)):
if not visited[i]:
dfs(i, 0)
Args:
graph: An adjacency list representing the graph.

for i in range(len(graph)):
for j in graph[i]:
if color[i] == color[j]:
return False
Returns:
True if there's no edge that connects vertices of the same set, False otherwise.

return True
Examples:
>>> is_bipartite(
... defaultdict(list, {0: [1, 2], 1: [0, 3], 2: [0, 4], 3: [1], 4: [2]})
... )
False
>>> is_bipartite(defaultdict(list, {0: [1, 2], 1: [0, 2], 2: [0, 1]}))
True
"""

def depth_first_search(node: int, color: int) -> bool:
visited[node] = color
return any(
visited[neighbour] == color
or (
visited[neighbour] == -1
and not depth_first_search(neighbour, 1 - color)
)
for neighbour in graph[node]
)

# Adjacency list of graph
graph = {0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: []}
print(check_bipartite_dfs(graph))
visited: defaultdict[int, int] = defaultdict(lambda: -1)

return all(
not (visited[node] == -1 and not depth_first_search(node, 0)) for node in graph
)


if __name__ == "__main__":
import doctest

result = doctest.testmod()

if result.failed:
print(f"{result.failed} test(s) failed.")
else:
print("All tests passed!")