zoukankan      html  css  js  c++  java
  • 数字字符串变换

    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)
                    
  • 相关阅读:
    设计模式-解释器模式
    安卓运行环境(四)
    安卓创建应用窗口(三)
    微型 ORM 的第二篇 DapperLambda性能测试[Dapper比较篇]
    微型 ORM 的第一篇 DapperLambda发布
    visual studio 2013 使用IIS Express附加调试MVC5
    数据库常用查询语句写法(优化)
    Windows Server 2008通过计划任务定时执行bat文件
    第一章 Memcached安装
    第四章 LINQ to SQL基本用法
  • 原文地址:https://www.cnblogs.com/sunupo/p/13561911.html
Copyright © 2011-2022 走看看