100 DEFINT A-Z:INPUT "a,b ";A,B:N=A*B:TIM#=TIMER 110 DIM B(N),A(N,N),U(N,N),V(N),P(N),T(N) 120 FOR X=0 TO B-1:FOR Y=0 TO A-1:XY=X*A+Y+1 130 FOR U=0 TO B-1:FOR V=0 TO A-1:UV=U*A+V+1 140 DX=X-U:DY=Y-V:IF DX*DX+DY*DY=5 THEN A(XY,UV)=1 150 NEXT V,U,Y,X 160 OPEN "o",3,"p":PRINT#3,"1,1":CLOSE 3 170 FOR S=1 TO N:FOR I=1 TO S:U(S,I)=0:NEXT 175 FOR I=S+1 TO N:FOR J=1 TO N:U(S,J)=U(S,J)+A(I,J):NEXT J,I 180 FOR I=S+1 TO N:U(S,I)=N+1:NEXT I,S 190 FOR S=2 TO N-1 200 VON0=1:WHILE U(S-1,VON0)=0:VON0=VON0+1:WEND 210 VON=1:WHILE U(S,VON)=0:VON=VON+1:WEND 220 OPEN "i",2,"p":OPEN "o",3,"q" 230 ' -------------------------------------- 240 INPUT#2,O$,Z#:FOR I=VON0 TO S-1:B(I)=ASC(MID$(O$,I-VON0+1,1))-48:NEXT 250 FOR I=VON0 TO S:T(I)=B(I):NEXT:T(S)=1:GOSUB 530 260 P=1:FOR I=1 TO 22:P(I)=0:V(I)=0:NEXT:FOR I=VON0 TO S 270 IF B(I)>1 AND V(B(I))=0 THEN P=P+1:V(B(I))=I 280 IF B(I)>1 AND V(B(I))>0 THEN P(I)=V(B(I)):P(V(B(I)))=I 290 NEXT I 300 D=0:FOR U=VON0 TO S:IF B(U)=0 OR A(U,S)=0 THEN 350 310 D=D+1:Q(D)=U 320 FOR I=VON0 TO S:T(I)=B(I):NEXT 330 IF B(U)=1 THEN T(U)=P+1:T(S)=P+1:GOSUB 530 340 IF B(U)>1 THEN T(S)=B(U):T(U)=0:GOSUB 530 350 NEXT U 360 FOR I=1 TO D:FOR J=I+1 TO D:U=Q(I):V=Q(J):IF B(U)>1 AND P(U)=V THEN 420 370 FOR K=VON0 TO S:T(K)=B(K):NEXT 380 IF B(U)=1 AND B(V)=1 THEN T(U)=P+1:T(V)=P+1:GOSUB 530 390 IF B(U)>1 AND B(V)>1 THEN T(V)=0:T(P(V))=T(U):T(U)=0:GOSUB 530 400 IF B(U)>1 AND B(V)=1 THEN T(V)=B(U):T(U)=0:GOSUB 530 410 IF B(U)=1 AND B(V)>1 THEN T(U)=B(V):T(V)=0:GOSUB 530 420 NEXT J,I 430 IF EOF(2)=0 THEN 240 ELSE CLOSE 440 SHELL "sort q p" 450 OPEN "i",2,"p":OPEN "o",3,"q":INPUT#2,M$,S#:S1#=1:S2#=0 460 IF EOF(2) THEN 500 470 INPUT#2,A$,Z# 480 IF A$=M$ THEN S#=S#+Z#:GOTO 460 490 PRINT#3,M$;",";S#:M$=A$:S1#=S1#+1:S2#=S2#+S#:S#=Z#:GOTO 460 500 PRINT#3,M$;",";S#:S2#=S2#+S#:CLOSE:SHELL "del p":SHELL "ren q p" 510 PRINT S;S1#;S2#;TIMER-TIM# 520 NEXT S:END 530 ' ---------------correct pathstructure and print----------- 540 Q=0:FOR K=VON0 TO VON-1:Q=Q+T(K):NEXT:IF Q THEN RETURN 550 G=0:B$="":K1=1:FOR K=0 TO 18:V(K)=0:NEXT 560 FOR K=VON TO S:T=T(K):IF T<2 THEN B=T:GOTO 580 570 IF V(T) THEN B=V(T) ELSE K1=K1+1:B=K1:V(T)=K1 580 B$=B$+CHR$(48+B):IF (U(S,K)=0 AND B>0) OR (B=1 AND U(S,K)<2) THEN G=1 590 NEXT:IF G=0 THEN PRINT#3,B$;",";Z# 600 RETURN