You are on page 1of 2

graph = [] #Đồ thị

DSK=[] #Đánh dấu đường đi


queueSort =[] # Danh sách L

gu={
"A":0,
"B":0,
"C":0,
"D":0,
"E":0,
"F":0,
"G":0,
"H":0,
"I":0,
"J":0,
}

with open('input1.txt') as rf:


n = int(rf.readline()) #Số đỉnh
bd= rf.readline() #Đỉnh bắt đầu
kt= rf.readline() #Đỉnh kết thúc
for i in range(n):
graph.append(list(map(int,rf.readline().split())))

def bfs(graph, node):


queueSort.append([ord(node[0]) - 65 ,graph[ord(node[0]) - 65 ][ord(node[0]) -
65 ]])

wf.write('%-10s%-20s%-10s%-10s%-10s%-10s%-20s\n' % ("TTD",
"TTK","K(u,v)","h(v)","g(v)","f(v)" ,"DSL"))

while queueSort:
m =queueSort.pop(0)
KE = []
arr=[]
for neighbour in range(n):
if graph[m[0]][neighbour] != 0 and m[0]!=neighbour:

k = graph[m[0]][neighbour]
h= graph[neighbour][neighbour]
gv = k + gu[chr(m[0]+65)]
gu[chr(neighbour+65)] = gv
f= gv+h

queueSort.append([neighbour,f])
queueSort.sort(key=lambda x: x[1])
KE.append([neighbour,k,h,gv,f])
arr.append(chr(neighbour+65)+"-"+str(f))

# đánh dấu đường đi


DSK.append([chr(m[0]+65)+"-"+str(m[1]),arr])

# in đỉnh xét
wf.write("\n%-10s" % (chr(int(m[0])+65)+"-"+str(m[1])))

if m[0] == ord(kt[0]) - 65 :
wf.write("%-20s" % "TTKT\n")

# Truy vế tìm đường đi


dinh = chr(m[0]+65)+"-"+str(m[1])
DuongDi=[dinh]

while dinh[0]!=bd[0]:
for item in DSK:
if dinh in item[1]:
dinh=item[0]
DuongDi.append(dinh)

DuongDi.reverse()
wf.write("\nĐường đi từ " + bd[0] + " đến " + kt[0] + " là: ")
for i in range(len(DuongDi)-1):
wf.write(DuongDi[i][0]+"->")
wf.write(DuongDi[len(DuongDi)-1][0]+", Độ dài: "+str(DuongDi[len(DuongDi)-
1].split('-')[1]))
wf.close()
return False
else:
# in danh sách kề
index=0
for (item) in KE:
if index:
wf.write("%-10s%-20s%-10s%-10s%-10s%-10s\n"%
("",chr(item[0]+65),str(item[1]),str(item[2]),str(item[3]),str(item[4])))
else:
# in danh sách L
cotDSL=""
for item1 in queueSort:
cotDSL+=(chr(int(item1[0])+65)+"-"+str(item1[1])+" ")
wf.write("%-20s%-10s%-10s%-10s%-10s%-20s\n"%
(chr(item[0]+65),str(item[1]),str(item[2]),str(item[3]),str(item[4]),cotDSL))
index=1

return True
# Driver Code
wf = open('output.txt', 'w',encoding = 'utf-8')
if bfs(graph, bd):
wf.write("\nKhông có đường đi từ "+ bd[0] +" đến "+kt[0])
wf.close()

You might also like