$sz1 = [[""], [""], ["1", "7"]],[[""], [""], ["4", "2"]],[["3"], [""], [""]],[[""], [""], ["6"]],[[""], ["5"], [""]],[[""], [""], ["6"]],[[""], [""], ["1", "7"]],[["8"], [""], [""]],[[""], ["9"], [""]],[[""], ["10"], [""]],[[""], [""], ["*"]] i=0
while i<$sz1.size do p $sz1[i] i = i + 1 end puts
def read(p,temp1,temp5) temp1.push(p.to_s)#进队列 while !temp1.empty? do t=temp1.shift#.shift出队列 if !temp5.include?(t)&& t!="*" temp1=temp1+ $sz1[t.to_i][2] #合并数组,即进队列 temp5.push(t) #单个数据进队列 end end return temp5.sort #.uniq 去掉重复元素 end
def read2(p,temp2,temp3,temp4) #先把能得到的起始点找出 while !temp2.empty? do t=temp2.shift #.shift 出队列
if $sz1[t.to_i][p][0]!="*" temp3.push($sz1[t.to_i][p][0]) #进队列 end end
while !temp3.empty? do t=temp3.shift#.shift出队列 if !temp4.include?(t)&& t!="*" temp3=temp3+ $sz1[t.to_i][2] #合并数组,即进队列 temp4.push(t) #单个数据进队列 end end return temp4.sort end
#初始化数组 temp1=Array.new #接下来要读的数,队列 temp2=Array.new #已经读过的数 temp3=Array.new #已经读过的数 temp4=Array.new #已经读过的数 temp5=Array.new #已经读过的数
temp2=read 0,temp1,temp5 p temp2 p read2 1,temp2,temp3,temp4 temp2=read 0,temp1,temp5 p temp2 p read2 0,temp2,temp3,temp4