Answer to Question #294802 in Python for eranna

Question #294802

: A multi-graph is a graph which may have more than one edge (parallel edges) between a pair of vertices. Suppose that these graphs may also have self-loops (an edge from a vertex to itself). Given such a graph G as an input, print the adjacency list representation of an equivalent undirected graph G’, in which all the multiple edges between two vertices are replaced by a single edge, and all self-loops are removed. Your algorithm should run in O(n+m) time. Input Format: The input is a text file which gives the adjacency list representation of the multigraph. The first line specifies the number of vertices and edges n and m. The next m lines specify the m edges, one edge per line. Assume the vertices are numbered 0 to n-1. Output Format: The adjacency list representation of the new graph G’. Sample Input (for the graph above): 3 6 0 0 0 2 2 2 0 2 0 2 0 1 Sample Output: Adjacency list representation of G’: 0: 1 2 1: 0 2: 0


1
Expert's answer
2022-02-07T12:50:28-0500
# There is no need to specify the number of vertices and edges in the file as
# this is redundant information. For this reason, the script uses a file that
# contains only the matrix without any other information.
import numpy as np

def read_f(name_f):
    given_file = open(name_f, 'r')

    lines = given_file.readlines()
    digits = []
    for line in lines:
        for c in line:
            if c.isdigit() == True:
                digits.append(int(c))
    given_file.close()
    size_g = int(len(digits)**(1/2))
    digits = np.array(digits).reshape(size_g, size_g)
    for i in range(size_g):
        for j in range(size_g):
            if i == j:
                digits[i][j] = 0
            elif digits[i][j] > 0:
                digits[i][j] = 1
                digits[j][i] = 1
    print("Result matrix: \n", digits)
    print('The adjacency list representation: ')
    for i in range(size_g):
        row = []
        for j in range(size_g):
            if digits[i][j] == 1:
                row.append(j)
        print(f'{i}: ', row)


def main():
    name_f = 'test.txt'
    read_f(name_f)

if __name__ == "__main__":
    main()

Need a fast expert's response?

Submit order

and get a quick answer at the best price

for any assignment or question with DETAILED EXPLANATIONS!

Comments

No comments. Be the first!

Leave a comment

LATEST TUTORIALS
New on Blog
APPROVED BY CLIENTS