xの値に基づいて分類される図の全ての点、

import  json
import  sys
import  sys
import random

sys.setrecursionlimit(1000000) #
all_start='0_0'
all_end='10000_100000'
index=[]
re={}
visited=[]
ans=[]
G={}
def read_source(): # 
 # with open("rmonMap.json",'r') as load_f:
  #with open("map.json",'r') as load_f:
  with open("shanghai.json",'r') as load_f:
    load_dict = json.load(load_f)  
    data=load_dict
    for i,j in data.items():
       if i=="Map":
           data_v1=data[i]
           for h,k in data_v1.items():
                 if h=="Cells":
                      re=data_v1[h]
                      return re
def create_graph(source):

    route={}
    ture=1  
    for i in range(0,len(source)):#len(source)=2
   
        a=source[i]
       
        index=0
        for i,j in a.items():
            if i=="X":
                index_x=j
            if i=="Y":
                index_y=j
            if i=="E" or i=="W" or i=="N" or i=="S":
                index=index+1
        arr_2=2
        arr_3=3
        for i,j in a.items():      
                if i=="Key":
                    order=j   
                    if index==0:
                        route[j]={}
                    elif index==1:
                        route[j]={"E"}
                    elif index==2:
                        route[j]={"E","S"}
                    elif index==3:
                        route[j]={"E","S","W"}
                    elif index==4:
                        route[j]={"E","S","W","N"}
                    else:  
                        route[j]={}
                         
        for p ,j in a.items():
            if j==str(order):

                arr=list(route[j])
        
        arr_2=arr_2-1
        for i,j in a.items():
            if i=="E":
                  
                    E_X=index_x+1  
                    c=str(E_X)+"_"+str(index_y)
                  
                    if index==4:
                        arr[0]=c
                    if index==1:
                        arr[0]=c
                    if index==2:
                        arr[arr_2]=c
                        arr_2=arr_2-1
                    if index==3:
                       arr_3=arr_3-1
                       arr[arr_3]=c
            if i=="S":
                 
                    E_Y=index_y+1
                  
                    c=str(index_x)+"_"+str(E_Y)
               
                    if index==4:
                        arr[1]=c
                    if index==1:
                        arr[0]=c
                    if index==2:
                        arr[arr_2]=c
                        arr_2=arr_2-1
                    if index==3:
                       arr_3=arr_3-1
                       arr[arr_3]=c
            if i=="W":  
             
                    E_X=index_x-1
                    c=str(E_X)+"_"+str(index_y)
                    if index==4:
                        arr[2]=c
                    if index==1:
                        arr[0]=c
                    if index==2:
                        arr[arr_2]=c
                        arr_2=arr_2-1
                    if index==3:
                         arr_3=arr_3-1
                         arr[arr_3]=c
            if i=="N":   
               
                    E_Y=index_y-1
                    c=str(index_x)+"_"+str(E_Y)
                    if index==4:
                        arr[3]=c
                    if index==1:
                        arr[0]=c
                    if index==2:
                        arr[arr_2]=c
                        arr_2=arr_2-1
                    if index==3:
                        arr_3=arr_3-1
                        arr[arr_3]=c
        for i , j in route.items():
        
            if i==str(order): 
             
                route[order]=arr
 
    return route# zhi yu xia dui ying ke yi dao da de dian

index=[]


for i,j in  G.items():
      if len(j)==0:
            del G[i]
def com(a,b):
    flag=[]
    for i in range(0,len(b)):
        flag.append(0)
        for j in range(0,len(a)):
            if b[i]==a[j]:
                flag[i]=1
                break 
    for i in range(0,len(b)):
        if flag[i]==0:
            print("***********error************")
            b.remove(b[i])
    return b

def check_graph(graph):
    a=[]
    b=[]
    c=[]
    for i,j in graph.items():
         a.append(i)
    for i,j in graph.items():
            b.append(j)
            for n in b:
                data=n
            for y in data: 
                c.append(y)
            c=com(a,c)
            graph[i]=c
            b=[]
            c=[]
    return graph   
def oriation(a):
        a_=0
        con_a=a_con=''
        a=list(a)
        for i in range(0,len(a)-1):
            if a[i]=='_':
                  a_=i
        for i in range(0,len(a)):
            if i<a_:
                 a_con=a_con+a[i]
            elif i>a_:
               con_a=con_a+a[i]
        return int(a_con),int(con_a)

def create_oriation(a,b):
        a,b=str(a),str(b)
        
        a_=b_=0
        con_a=con_b=a_con=b_con=''
        a,b=list(a),list(b)
        for i in range(0,len(a)-1):
            if a[i]=='_':
                  a_=i
        for i in range(0,len(b)-1):
            if b[i]=='_':
                  b_=i
        for i in range(0,len(a)):
            if i<a_:
                 a_con=a_con+a[i]
            elif i>a_:
               con_a=con_a+a[i]

        for i in range(0,len(b)):
              if i<b_:
                 b_con=b_con+b[i]
              elif i>b_:
               con_b=con_b+b[i]
    

        if a_con == b_con and  abs(int(con_a)-int(con_b))==1:
         
                  return True
        elif con_a==con_b  and abs(int(a_con)-int(b_con))==1:
              
                   return True
        else:
                  
                   return False 

def sort_vector(key):
    te=[]
    ans=[]
    test={}
    for i in range(0,len(key)):
        add=0
        i_con,con_i=oriation(key[i])
        add=int(i_con)+int(con_i)
        te.append(add)
        test[key[i]]=add
    quick_sort(te,0,len(te)-1)


    for i in range(0,len(te)):
        for h,j in test.items():
               
                if te[i]==j:
                    ans.append(h)
                    break
    return ans 
def quick_sort(mylist,start,end):
    if start<end:
        i,j=start,end
        base = mylist[i]
        while i<j:
                while(i<j) and (mylist[j]>=base):
                     j=j-1
                mylist[i]=mylist[j]
                while(i<j) and (mylist[i]<=base):
                      i=i+1
                mylist[j]=mylist[i]
        mylist[i]=base
        quick_sort(mylist,start,i-1)
        quick_sort(mylist,i+1,end)
    return mylist 


def main():
    re=read_source()


    G=create_graph(re)
    print("G:",G,len(G))
    G=check_graph(G)
    print(len(G))
    for i,j in G.items():
         index.append(i)
    x12=[]
    print("index:",index,len(index))
    x16=[]
    x17=[]
    x18=[]
    for j in range(11,50):#X 的取值范围
        name=str(j)
        name=[]
        for i in range(0,len(index)):
            i_con,con_i=oriation(index[i])
            if i_con==j:
                name.append(index[i])
        name=sort_vector(name)
        print("name:",name,len(name))
main()

 

おすすめ

転載: blog.csdn.net/weixin_42528089/article/details/90674846