数字字符串变换

1.

0285219430826
4
0 2
2 3
8 4
4 7
3375319733736
import copy
def dfs(matrix,visited,i,cnt,id):
    for j in range(len(matrix)):
        if matrix[i][j]==1 and visited[j]==0:
            visited[j]=1
            id[j]=cnt
            dfs(matrix,visited,j,cnt,id)
if __name__ == '__main__':
    string =input()
#     string = '0285219430826'
    n=10
    m=int(input())
    data = []
    for _ in range(m):
        data.append(list(map(int,input().split())))
        pass
#     data = [[0,2],[2,3],[8,4],[4,7]]
    matrix=[[0]*n  for _ in range(n)]
    visited=[0]*n  # 记录每个节点是否被访问过
    id=[-1]*n # 记录每个节点对应的联通分区编号
    for i in range(n):
        matrix[i][i]=1
    for i,j in data:
        matrix[i][j]=1
        matrix[j ][i] = 1
    cnt=0
    for i in range(len(matrix)):
        if visited[i]==0:
            dfs(matrix,visited,i,cnt,id)
            cnt+=1
    #print(cnt,id)
    
    #print(len(set(id)))
    dic={}
    for idx,ele in enumerate(id):
        dic.setdefault(ele,[])
        dic[ele].append(idx)
    #print(dic)
    new_dic = copy.deepcopy(dic)
    for key,val in new_dic.items():
        if len(val)<2:
            del dic[key]
    #print(dic)  # dic是连通分量字典
    lst = []
    for i in range(m):
        lst.append(data[i][0])
        lst.append(data[i][1])
    
    idx_dic = {}
    for i,ele in enumerate(lst):
        idx_dic.setdefault(ele,i)
        idx_dic[ele]=i
#     求出每一个连通分量的最大索引值对应的数字
    max_idx_num=[]
    for k,v in dic.items():
        temp=[]
        for ele in v:
            temp.append((ele,idx_dic[ele]))
        max_idx_num.append( sorted(temp,key=lambda x:x[1])[-1][0])
    new_string = ""
    for jdx,ele in enumerate(string):
        flag=True
        for i,kv in enumerate(dic.items()):
            if int(ele) in kv[1]:
                new_string+=str(max_idx_num[i])
                flag=False
                break
        if flag:
            new_string+=string[jdx]
    print(new_string)
                
原文地址:https://www.cnblogs.com/sunupo/p/13561911.html