OPTION BASE 0 DIM Q(15),QQ(15),B(15),SL(15),SR(15),UE(15),KAI(15) DATA 0,2,2,2,2,0,0,2,1,0,0,0,2,0,1,0 MAT READ B MAT Q=ZER ! 階層 Q に存在する節の数 MAT QQ=ZER ! 階層 Q までに存在する節の数 MAT SL=ZER ! 左下に繋がる数字 MAT SR=ZER ! 右下に繋がる数字 MAT UE=ZER ! 上に繋がる数字 MAT KAI=ZER ! 階層 PRINT PRINT "分岐数の順列:" PRINT " "; FOR i=1 TO 15 PRINT B(i); NEXT i PRINT PRINT LET Q(1)=B(1) LET C=1 LET W=2 DO WHILE C<15 FOR i=1 TO Q(W-1) LET Q(W)=Q(W)+B(C+i) NEXT i LET C=C+Q(W-1) LET W=W+1 LOOP PRINT PRINT "それぞれの階層の節の数:" PRINT " Q ( 0 ) = 1" FOR i=1 TO 15 IF Q(i)=O THEN LET II=i-1 EXIT FOR END IF PRINT " Q( ";-1*i;") =";Q(i) NEXT i PRINT LET QQ(0)=1 FOR i=1 TO II LET QQ(i)=QQ(i-1)+Q(i) NEXT i PRINT PRINT "それぞれの階層の一番左の節の番号:" PRINT " QQ ( 0 ) の最左節番号: 1" FOR i=1 TO II-1 PRINT " QQ( ";-1*i;") の最左節番号:";QQ(i-1)+1 NEXT i PRINT PRINT PRINT "皆層:( 節番号 ⇒ 階層 )" LET KAI(1)=0 PRINT " 1 ⇒ ";KAI(0) FOR i=1 TO 6 FOR j=QQ(i-1)+1 TO QQ(i) LET KAI(j)=i PRINT USING "#######":J; PRINT " ⇒ ";-1*KAI(j) NEXT j NEXT i PRINT IF B(1)=1 THEN LET SL(1)=2 PRINT " SL( 1 ) = 2" ELSEIF B(1)=2 THEN LET SL(1)=2 LET SR(1)=3 LET UE(2)=1 LET UE(3)=1 END IF FOR i=1 TO 15 LET R=1 FOR j=QQ(i-1)+1 TO QQ(i) IF B(j)=1 THEN LET SL(j)=QQ(i)+R LET UE(QQ(i)+R)=j LET R=R+1 ELSEIF B(j)=2 THEN LET SL(j)=QQ(i)+R LET UE(QQ(i)+R)=j LET SR(j)=QQ(i)+R+1 LET UE(QQ(i)+R+1)=j LET R=R+2 END IF NEXT j NEXT i PRINT PRINT "つながる節たち:( SL: 左下へ SR: 右下へ UE: 上方に )" FOR i=1 TO 15 IF SL(i)<>0 THEN PRINT " SL(";i;") =";SL(i) END IF IF SR(i)<>0 THEN PRINT " SR(";i;") =";SR(i) END IF IF UE(i)<>0 THEN PRINT " UE(";i;") =";UE(i) END IF NEXT i PRINT END