<｜begin▁of▁sentence｜>### Instruction:
As a Building Inspector who inspects buildings and structures to ensure compliance with building codes, zoning regulations, and safety standards, imagine you are tasked with analyzing a property development project. You have a list of rooms (U = {1, 2, 3, 4}) and furniture items (V = {'a', 'b', 'c'}) to be placed in those rooms. Using a specialized tool like NetworkX's bipartite matching algorithm, you need to determine the optimal placement of furniture items in the rooms to maximize space utilization while adhering to safety and zoning requirements.
### Response:
from networkx.algorithms import bipartite

# Create a bipartite graph
B = nx.Graph()
B.add_nodes_from([1, 2, 3, 4], bipartite=0)
B.add_nodes_from(['a', 'b', 'c'], bipartite=1)
B.add_edges_from([(1, 'a'), (1, 'b'), (2, 'b'), (2, 'c'), (3, 'c'), (4, 'a')])

# Compute the maximum matching
matching = bipartite.matching.hopcroft_karp_matching(B, top_nodes=[1, 2, 3, 4])
print(matching)
<|EOT|>
