python3 代码,不知道哪里出问题了,通不过
查看原帖
python3 代码,不知道哪里出问题了,通不过
536093
hyyycx楼主2021/9/28 21:21
import numpy as np
n, m, type1, type2 = map(int, input().split())
# 输入m条边,生成对应的邻接矩阵,生成对应的关联矩阵
n_AdjMatrix = np.zeros((n, n), dtype=int)
n_AsMatrix = np.zeros((n, m), dtype=int)
n_AdjLink = [[]for i in range(n)]
n_AdjLink_reverse = [[]for i in range(n)]
if_printAdj = 1
if_printAs = 1
v1_v_v2 = 0
A_forward = []
B_forward = []
Z_forward = []
A_reverse = []
B_reverse = []
Z_reverse = []
for i in range(m):
    if type2 == 0:
        v1, v2 = map(int, input().split())
        if v1 == v2:
            if_printAs = 0
    else:
        if_printAs = 0
        v1, v2, v1_v_v2 = map(int, input().split())
    if n_AdjMatrix[v1 - 1][v2 - 1] != 0:
        if_printAdj = 0
# 生成邻接矩阵或权矩阵
    if type2 == 0:
        if type1 == 0:
            n_AdjMatrix[v1 - 1][v2 - 1] = 1
            n_AdjMatrix[v2 - 1][v1 - 1] = 1
        else:
            n_AdjMatrix[v1 - 1][v2 - 1] = 1
    else:
        if type1 == 0:
            n_AdjMatrix[v1 - 1][v2 - 1] = v1_v_v2
            n_AdjMatrix[v2 - 1][v1 - 1] = v1_v_v2
        else:
            n_AdjMatrix[v1 - 1][v2 - 1] = v1_v_v2
# 生成关联矩阵
    n_AsMatrix[v1 - 1][i] = 1
    n_AsMatrix[v2 - 1][i] = 1
# 生成邻接表
    if type2 == 0:
        n_AdjLink[v1 - 1].append(v2)
        if type1 == 0:
            n_AdjLink[v2 - 1].append(v1)
        else:
            n_AdjLink_reverse[v2 - 1].append(v1)
    else:
        n_AdjLink[v1 - 1].append(v2)
        n_AdjLink[v1 - 1].append(v1_v_v2)
        if type1 == 0:
            n_AdjLink[v2 - 1].append(v1)
            n_AdjLink[v2 - 1].append(v1_v_v2)
        else:
            n_AdjLink_reverse[v2 - 1].append(v1)
            n_AdjLink_reverse[v2 - 1].append(v1_v_v2)
# 生成正向表
# 无赋权图  向量A:节点1在向量B中的起点(无邻接节点记为1)、节点2、....、向量B的末地址+1    向量B:节点1的邻接节点、节点2的邻接节点、。。。。
B_start = 1
if type2 == 0:
     for i in range(n):
         if n_AdjLink[i]:
             A_forward.append(B_start)
             B_start += len(n_AdjLink[i])
             for j in range(len(n_AdjLink[i])):
                 B_forward.append(n_AdjLink[i][j])
         else:
             A_forward.append(B_start)
     A_forward.append(B_start)
else:
    for i in range(n):
        if n_AdjLink[i]:
            A_forward.append(B_start)
            B_start += len(n_AdjLink[i])//2
            for j in range(0, len(n_AdjLink[i]), 2):
                B_forward.append(n_AdjLink[i][j])
                Z_forward.append(n_AdjLink[i][j + 1])
        else:
            A_forward.append(B_start)
    A_forward.append(B_start)
B_start_reverse = 1
if type1 == 1:
    if type2 == 0:
        for i in range(n):
            if n_AdjLink_reverse[i]:
                A_reverse.append(B_start_reverse)
                B_start_reverse += len(n_AdjLink_reverse[i])
                for j in range(len(n_AdjLink_reverse[i])):
                    B_reverse.append(n_AdjLink_reverse[i][j])
            else:
                A_reverse.append(B_start_reverse)
        A_reverse.append(B_start_reverse)
    else:
        for i in range(n):
            if n_AdjLink_reverse[i]:
                A_reverse.append(B_start_reverse)
                B_start_reverse += len(n_AdjLink_reverse[i])//2
                for j in range(0, len(n_AdjLink_reverse[i]), 2):
                    B_reverse.append(n_AdjLink_reverse[i][j])
                    Z_reverse.append(n_AdjLink_reverse[i][j + 1])
            else:
                A_reverse.append(B_start_reverse)
        A_reverse.append(B_start_reverse)

str_out = ''
if if_printAdj:
    for i in range(n):
        str_out = ''
        for j in range(n):
            str_out += str(n_AdjMatrix[i][j]) + ' '
        print(str_out[:-1])
if if_printAs:
    for i in range(n):
        str_out = ''
        for j in range(m):
            str_out += str(n_AsMatrix[i][j]) + ' '
        print(str_out[:-1])
for i in range(n):
    str_out = ''
    if n_AdjLink[i]:
        for j in range(len(n_AdjLink[i])):
            str_out += str(n_AdjLink[i][j]) + ' '
        print(str_out[:-1])
str_out = ''
for i in range(len(A_forward)):
    str_out += str(A_forward[i]) + ' '
print(str_out[:-1])
str_out = ''
for i in range(len(B_forward)):
    str_out += str(B_forward[i]) + ' '
print(str_out[:-1])
str_out = ''
if type2 == 1:
    for i in range(len(Z_forward)):
        str_out += str(Z_forward[i]) + ' '
    print(str_out[:-1])
if type1 == 1:
    if type2 == 0:
        str_out = ''
        for i in range(len(A_reverse)):
            str_out += str(A_reverse[i]) + ' '
        print(str_out[:-1])
        str_out = ''
        for i in range(len(B_reverse)):
            str_out += str(B_reverse[i]) + ' '
        print(str_out[:-1])
    else:
        str_out = ''
        for i in range(len(A_reverse)):
            str_out += str(A_reverse[i]) + ' '
        print(str_out[:-1])
        str_out = ''
        for i in range(len(B_reverse)):
            str_out += str(B_reverse[i]) + ' '
        print(str_out[:-1])
        str_out = ''
        for i in range(len(Z_reverse)):
            str_out += str(Z_reverse[i]) + ' '
        print(str_out[:-1])
2021/9/28 21:21
加载中...