leetcode146周赛-5132-颜色最短的交替路径

---恢复内容开始---

题目描述:

 

class Solution:
    def shortestAlternatingPaths(self, n: int, red_edges, blue_edges):
        def function(n,r,b):
            result=[[float("inf")]*2 for _ in range(n)]
            result[0]=[0,0]
            r.sort()
            b.sort()
            rdict={}
            bdict={}
            state=0
            for i in range(len(r)):
                if r[i][0] not in rdict:
                    rdict[r[i][0]]=[r[i][1]]
                else:
                    rdict[r[i][0]].append(r[i][1])
            for i in range(len(b)):
                if b[i][0] not in bdict:
                    bdict[b[i][0]]=[b[i][1]]
                else:
                    bdict[b[i][0]].append(b[i][1])
            while state==0:
                state=1
                for i in range(n):
                    if i in rdict:
                        for j in rdict[i]:
                            if result[j][0]>result[i][1]+1:
                                state=0
                            result[j][0]=min(result[j][0],result[i][1]+1)
                    if i in bdict:
                        for j in bdict[i]:
                            if result[j][1]>result[i][0]+1:
                                state=0
                            result[j][1]=min(result[j][1],result[i][0]+1)
            tmpresult=[]
            for i in range(len(result)):
                if min(result[i])==float("inf"):
                    tmpresult.append(-1)
                else:
                    tmpresult.append(min(result[i]))
            return tmpresult
        return function(n,red_edges,blue_edges)

 

posted @ 2019-07-24 09:58  oldby  阅读(250)  评论(0编辑  收藏  举报