Paste the code first, come back to replenish
import json
import sys
#coding=utf-8
# scope:0=<x<=6 1=<y<=11
index=[]
re={}
visited=[]
ans=[]
def read_source(): #
with open("rmonMap.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 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 pan_duan(x,y):
#if 0<=x<=12 and 12<=y<=14 :#abs the asseram
if 0<=x<=6 and 1<=y<=11 :#abs the asseram
#print("success")
return True
else:
return False
def divide_graph(re,g_x1,g_y1,g_x2,g_y2,g_x3,g_y3,g_x4,g_y4):# one to two
graph1=[]
graph2=[]
for i in range(0,len(re)):
for a,b in re[i].items():
if a=="Key":
a_con,con_a=oriation(b)
result=pan_duan(a_con,con_a)
if result==True:
graph1.append(re[i])
else:
graph2.append(re[i])
return graph1,graph2
def create_graph(source):
#print(source)
route={}
ture=1
for i in range(0,len(source)):#len(source)=2
#print(source[i],len(source))
a=source[i]
#print(a)
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):
#print("success")
#print(route[j])
arr=list(route[j])
#print(arr)
for i,j in a.items():
arr_2=arr_2-1
if i=="E":
#print("i:",i)
E_X=index_x+1
c=str(E_X)+"_"+str(index_y)
# print("C",c)
if index==4:
arr[0]=c
if index==1:
arr[0]=c
if index==2:
arr[arr_2]=c
if index==3:
arr_3=arr_3-1
arr[arr_3]=c
if i=="S":
# print("i:",i)
E_Y=index_y+1
# print(E_Y)
c=str(index_x)+"_"+str(E_Y)
#print("C",c)
if index==4:
arr[1]=c
if index==1:
arr[0]=c
if index==2:
arr[arr_2]=c
if index==3:
arr_3=arr_3-1
arr[arr_3]=c
if i=="W":
# print("i:",i)
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
if index==3:
arr_3=arr_3-1
arr[arr_3]=c
if i=="N":
# print("i:",i)
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
if index==3:
arr_3=arr_3-1
arr[arr_3]=c
for i , j in route.items():
# print(i,j)
if i==str(order):
# print("success")
route[order]=arr
#print("****************************")
return route# zhi yu xia dui ying ke yi dao da de dian
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 add_graph(graph):# create the key of graph
index=[]
for i in range(0,len(graph)):
d=graph[i]
for g,h in d.items():
if g=='E' or g=='S' or g=='W' or g=='N':
flag=1
for g,h in d.items():
if g=='Key' and flag==1:
index.append(h)
flag=0
return index
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]
#print("a_con",a_con,"con_a:",con_a,"b_con:",b_con,"con_b:",con_b)
if a_con == b_con and abs(int(con_a)-int(con_b))==1:
#print("success!")
return True
elif con_a==con_b and abs(int(a_con)-int(b_con))==1:
#print("success!")
return True
else:
#print("error!")
return False
def list_to_dict(index):
test={}
for i in range(0,len(index)):
value=[]
for j in range(0,len(index)):
if i!=j:
result=create_oriation(index[i],index[j])
if result==True:
val=str(index[j])
value.append(val)
test[str(index[i])]=value
return test
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 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 select_start(G):
#print("index:",index )
te=[]
test={}
#print("index:",index)
for i in range(0,len(index)-1):
add=0
a_con,con_a =oriation(index[i])
#print(a_con,con_a)
add=a_con+con_a
test[index[i]]=add
te.append(add)
te=quick_sort(te,0,len(te)-1)
for i in G.keys():
re=0
a_con,con_a=oriation(i)
re = a_con+con_a
if re==te[0]:
# print("min:",i)
min=i
elif re==te[len(test)-1]:
#print("max:",i)
max=i
return min,max
def add_way(key,start,flag,sig):# key from min to max
way=[]
s_con,con_s=oriation(start)
k0_con,con_k0=oriation(key[0])
km_con,con_Km=oriation(key[len(key)-1])
print(s_con,con_s,k0_con,con_k0,km_con,con_Km)
if flag==1 and sig==1:
print("11111")
if ( s_con<k0_con or con_s<con_k0 ):# start is min
print("111 dada")
for i in key:
if i not in visited:
way.append(i)
elif ( s_con>km_con or con_s>con_Km ):# start is the max
print("1111 xiaoxiao")
for i in range(len(key)-1,-1,-1):
if i not in visited:
way.append(key[i])
if flag==0 and sig==1:# x is the different ,y is the same
if ( s_con<k0_con or con_s<con_k0 ):# start is min
for i in key:
if i not in visited:
way.append(i)
break# only one is add
elif ( s_con>km_con or s_con>km_con ):# start is the max
for i in range(len(key)-1,-1,-1):
if i not in visited:
way.append(key[i])
break # only one is add
if flag==0 and sig ==0:
if ( s_con<k0_con or con_s<con_k0 ):# start is min
print("111 dada")
for i in key:
if i not in visited:
way.append(i)
elif ( s_con>km_con or con_s>con_Km ):# start is the max
print("1111 xiaoxiao")
for i in range(len(key)-1,-1,-1):
if i not in visited:
way.append(key[i])
if flag==1 and sig ==0:
if ( s_con<k0_con or con_s<con_k0 ):# start is min
print("111 dada")
for i in key:
if i not in visited:
way.append(i)
break
elif ( s_con>km_con or con_s>con_Km ):# start is the max
print("1111 xiaoxiao")
for i in range(len(key)-1,-1,-1):
if i not in visited:
way.append(key[i])
break
print("way:",way)
return way
def select_vector( min,flag,max,sig):
visited=[]
visited.append(min)
a_con,con_a=oriation(min)
print("way6666:",visited,flag)
while len(visited)<len(index):
print( "len(visited)",len(visited),"len(index):",len(index))
if flag==0:
start = visited[len(visited)-1]
s_con,con_s=oriation(start)
key=[]
for i in index:
i_con,con_i=oriation(i)
if i_con!=s_con and con_i==con_s:
if i not in visited:
key.append(i)
key=sort_vector(key)
print(key,start,flag)
re=add_way(key,start,flag,sig)
visited=visited+re
print("666666666visited:",visited,len(visited),flag)
#break
flag=1
elif flag==1:
start = visited[len(visited)-1]
s_con,con_s=oriation(start)
key=[]
for i in index:
i_con,con_i=oriation(i)
if i_con==s_con and con_i!=con_s:
if i not in visited:
key.append(i)
key=sort_vector(key)
print("key:",key,"start:",start,"flag:",flag)
re=add_way(key,start,flag,sig)
visited=visited+re
print("visited:",visited,len(visited))
flag=0
return visited
def quick_graph_bianli(G,min,max): #create four vector
i_x,i_y=oriation(min)
a_x,a_y=oriation(max)
print(i_x,i_y,a_x,a_y)
flag=symbol=0
if abs(i_x-a_x)<abs(i_y-a_y):#the best way is y ,x is the same
flag=1
symbol=1
else: #the best way is x ,y is the same
flag=0
symbol=0
return flag,symbol
def main():
re=read_source()
graph1,graph2=divide_graph(re,0,12,6,12,0,14,5,14)
G=create_graph(graph1)
for i in G.keys(): ### this is all graph
index.append(i)
min,max=select_start(G)
print(min,max)
flag,symbol=quick_graph_bianli(G,min,max)
print("flag:",flag,"symbol:",symbol)
ans=select_vector(min,flag,max,symbol)
print("ans:",ans)
main()
最后的输出:('visited:', [u'0_1', u'0_2', u'0_3', u'0_4', u'0_5', u'0_6', u'0_7', u'0_8', u'0_9', u'0_10', u'0_11', u'1_11', u'1_10', u'1_9', u'1_8', u'1_7', u'1_6', u'1_5', u'1_4', u'1_3', u'1_2', u'1_1', u'2_1', u'2_2', u'2_3', u'2_4', u'2_5', u'2_6', u'2_7', u'2_8', u'2_9', u'2_10', u'2_11', u'3_11', u'3_10', u'3_9', u'3_8', u'3_7', u'3_6', u'3_5', u'3_4', u'3_3', u'3_2', u'3_1', u'4_1', u'4_2', u'4_3', u'4_4', u'4_5', u'4_6', u'4_7', u'4_8 ', u'4_9', u'4_10 ', u'4_11', u'5_11 ', u'5_10', u'5_9 ', u'5_8', u'5_7 ', u'5_6' u ' 5_5 ', u'5_4', u'5_3 ', u'5_2', u'5_1 ', u'6_1', u'6_2 ', u'6_3', u'6_4 ', u'6_5' u ' 6_6 ', u'6_7', u'6_8 ', u'6_9', u'6_10 ', u'6_11'], 77)
( 'Ans', [u'0_1 ', u'0_2', u'0_3 ', u'0_4', u'0_5 ', u'0_6', u'0_7 ', u'0_8', u'0_9 ', u'0_10', u'0_11 ', u'1_11', u'1_10 ', u'1_9', u'1_8 ', u'1_7', u'1_6 ', u'1_5', u'1_4 ', u'1_3', u'1_2 ', u'1_1', u'2_1 ', u'2_2', u'2_3 ', u'2_4', u'2_5 ', u'2_6', u'2_7 ', u'2_8', u'2_9 ', u'2_10', u'2_11 ', u'3_11', u'3_10 ', u'3_9', u'3_8 ', u'3_7', u'3_6 ', u'3_5', u'3_4 ', u'3_3', u'3_2 ', u'3_1', u'4_1 ', u'4_2', u'4_3 ', u'4_4', u'4_5 "u'4_6 'u'4_7' u'4_8 'u'4_9 ', u'4_10', u'4_11 ', u'5_11', u'5_10 ', u'5_9', u'5_8 ', u'5_7', u'5_6 ', u'5_5' u'5_4 ', u'5_3', u'5_2 ', u'5_1', u'6_1 ', u'6_2', u'6_3 ', u'6_4', u'6_5 ', u'6_6' u'6_7 ', u'6_8', u'6_9 ', u'6_10', u'6_11 '])