1

对于 2019 年 E 轮 codejam 中的第一名(https://codingcompetitions.withgoogle.com/kickstart/round/0000000000050edb/0000000000170721),我的代码可以在我的计算机上成功运行,但在线判断失败(跳过运行时错误测试集)。但是当我在线运行测试时,它可以(完成)。

我应该怎么做才能解决这个问题?

import numpy as np

def DG(conn1,i,A,k):    
    newk=np.concatenate((np.argwhere(conn1[:,i]==1),np.argwhere(conn1[i,:]==1)),axis=0)
    if newk.size>0:
        newk=newk.tolist()
        newk=sum(newk,[])
        k=k+newk
     # vertex conencted to i
    if len(k)!=0:
        for aa in k: # 遍历每个与i连接的node
            coco=conn1[aa,range(0,A)]
            if 1 in coco:
                return 1
            else:
                conn2=conn1.copy()
                conn2[aa,i]=0
                k.pop(0)
                return DG(conn2,aa,A,k)   # vertex connect to aa
    else:
        return 2

def solve(N,M):
    conn=np.zeros((N,N))
    for i in range(0,M):
        v1,v2=[int(s) for s in input().split(" ")]
        v1,v2=sorted([v1,v2])
        conn[v2-1,v1-1]=1  #  v1<v2
    degree=np.zeros((N,1))
    for i in range(1,N):
        temp=conn[i,range(0,i)]
        if 1 in temp: # directly connect to 0:i
            degree[i]=1
        else: # indirectly connect to 0:i
            conn1=conn.copy()     
            degree[i]=DG(conn1,i,i,[])

    return int(np.sum(degree))

case=int(input())
for k in range(1,case+1):
    N,M=[int(s) for s in input().split(" ")]
    degree=solve(N,M)
    print("Case #{}: {}".format(k, degree))

我使用如下官方测试。我可以离线获得这些正确的输出,但在线判断失败。而且我还尝试了一些复杂的测试用例。

2
2 1
1 2
Case #1: 1
3 1
2 3
Case #2: 3
4

0 回答 0