I have this hw:
- Read edge list from a file
- Turn it into an adjacency list
- Output an unweighted, undirected spanning tree of the graph (we can assume starting point is at vertex 0)
I have problem getting 3. to output correctly. Namely, file 1 should output [[1],[0,2,3],[1],[1]]
and I got [[1,2],[0,3],[0],[1]]
which is sort of ok since they are both spanning trees for n=4
from file 1
but here's the major problem: I don't know what's wrong in my code, for file 2: I get: [[10], [], [10], [10], [], [], [], [], [], [], [0, 3, 2], [], []]
Data for the files at end of my code.
(edit: starting from tree=[]
is where the problems lie, the rest have no issues)
Here's my attempt at the problem:
import itertools
edge_i=[]
edge_j=[]
x = []
y = []
edgelist = []
n = int(input("Enter value for n:")) #input n for number of vertices
adjlist = [[] for i in range(n)] #create n sublists inside empty initial adjlist
data = [['0','1'],['2','1'],['0','2'],['1','3']]
for line in data: #for loop for appending into adjacency list the correct indices taken from out of the edgelist
#(this line won't be needed when hardcoding input) line = line.replace("\n","").split(" ")
for values in line:
values_as_int = int(values)
edgelist.append(values_as_int)
#set of vertices present in this file - pick out only n vertices
verticesset=set(edgelist)
listofusefulvertices=list(verticesset)[0:n]
P = list(itertools.permutations(listofusefulvertices,2))
x.append(edgelist[0::2])
y.append(edgelist[1::2])
x = sum(x,[])
y = sum(y,[])
dataint=zip(x,y)
datatuples=list(dataint)
outdata = set(datatuples)&set(P)
output=list(outdata)
for k in range(len(output)):
edge_i.append(output[k][0])
edge_i.append(output[k][1])
edge_j.append(output[k][1])
edge_j.append(output[k][0])
for i in range(len(edge_i)):
u = edge_i[i]
v = edge_j[i]
adjlist[u].append(v)
print(adjlist)
tree = []
for vertexNum in range(len(listofusefulvertices)):
tree.append([])
treeVertices = [0]*n
treeVertices[0]=1
for vertex in range(0,n): #(here the range in skeletal code from school used 1,n but it only worked for me when I used 0,n-1 or 0,n)
if treeVertices[vertex] == 1:
for adjVertex in adjlist[vertex]:
if treeVertices[adjVertex] == 0:
treeVertices[adjVertex]=1
tree[adjVertex].append(vertex)
tree[vertex].append(adjVertex)
print(tree)
#The data from files were: file 1: [['0','1'],['2','1'],['0','2'],['1','3']]
# file 2: [['10','2'],['7','4'],['11','3'],['1','12'],['6','8'],['10','3'],['4','9'],['5','7'],['8','12'],['2','11'],['1','6'],['0','10'],['7','2'],['12','5']]