如题,试过使用python3.6和python3.11,代码在本地均运行正常,但同样的数据在OJ WA。 代码:
def main():
def topo_sort():
from collections import deque
from copy import copy
local_vertex_in_degree = copy(vertex_in_degree)
zero_degree_vertexes = deque()
res = ""
for vertex in local_vertex_in_degree.keys():
if local_vertex_in_degree[vertex] == 0:
zero_degree_vertexes.append(vertex)
max_number_of_vertex_with_same_in_degree = 0
visited_num = 0
while len(zero_degree_vertexes) > 0:
max_number_of_vertex_with_same_in_degree = max(
len(zero_degree_vertexes), max_number_of_vertex_with_same_in_degree
)
for _ in range(len(zero_degree_vertexes)):
current_vertex = zero_degree_vertexes.popleft()
visited_num += 1
res += current_vertex
for vertex in graph[current_vertex]:
local_vertex_in_degree[vertex] -= 1
if local_vertex_in_degree[vertex] == 0:
zero_degree_vertexes.append(vertex)
if visited_num < len(local_vertex_in_degree):
max_number_of_vertex_with_same_in_degree = 0
if max_number_of_vertex_with_same_in_degree == 0:
ret_code = 0
elif max_number_of_vertex_with_same_in_degree == 1:
ret_code = 1
else:
ret_code = 2
return ret_code, res
n, m = list(map(int, input().split()))
graph = dict()
vertex_in_degree = dict()
for i in range(1, m+1):
input_list = input().split(sep='<')
va, vb = input_list
for it in input_list:
if it not in graph:
graph[it] = set()
vertex_in_degree[it] = 0
if vb not in graph[va]:
vertex_in_degree[vb] += 1
graph[va].add(vb)
code, ans = topo_sort()
if code == 0:
print(f"Inconsistency found after {i} relations.")
elif code == 1 and len(ans) == n:
print(f"Sorted sequence determined after {i} relations: {ans}.")
else:
continue
exit()
print("Sorted sequence cannot be determined.")
if __name__ == '__main__':
main()
样例2:
4 6
C<D
C<B
B<A
C<D
D<A
A<A
结果:
Inconsistency found after 6 relations.