GRAPH EQU 20H
OUT EQU 21H
QUEUE EQU 1FH
F DATA 3CH
R DATA 3DH
N DATA 3EH
K DATA 3FH
TST:
MOV SP,#5FH
MOV DPTR,#GRA
MOV P2,#GRAPH
MOV R0,#0
MOV R2,#0A0H
CPY:
CLR A
MOVC A,@A+DPTR
MOVX @R0,A
INC DPTR
INC R0
DJNZ R2,CPY
MOV P2,#GRAPH
MOV R0,#0
MOVX A,@R0
JZ STOP
INC A
MOV N,A
MOV K,#1
TST1:
MOV DPH,#OUT
MOV DPL,#0
MOV R2,#0
CLR A
CLEAR:
MOVX @DPTR,A
INC DPTR
DJNZ R2,CLEAR
MOV P2,#GRAPH
MOV R0,#0
MOV DPH,#OUT
MOV DPL,#0
MOVX A,@R0
MOVX @DPTR,A
MOV R7,A
INC DPTR
MOV R0,#10H
CLRF:
CLR A
MOVX @R0,A
MOV A,#10H
ADD A,R0
MOV R0,A
JNZ CLRF
LCALL SETNULL
MOV A,K
LCALL DATAIN
LCALL BFS
INC K
MOV A,K
CJNE A,N,TEST1
STOP: LJMP STOP
;出发点为1时的遍历顺序:ABHCIGDFE
;出发点为2时的遍历顺序:BACIHDFGE
;出发点为3时的遍历顺序:CBDFAIEGH
;出发点为4时的遍历顺序:DCEBFGAIH
;出发点为5时的遍历顺序:EDFGCIHBA
;出发点为6时的遍历顺序:FCEGIBDHA
;出发点为7时的遍历顺序:GEFHDCIAB
;出发点为8时的遍历顺序:HAGIBEFCD
;出发点为9时的遍历顺序:IBFHACEGD
BFS:
MOV A,F
XRL A,R
JZ BFSEND
LCALL DATAOUT
MOV R0,A
MOVX A,@R0
MOVX @DPTR,A
INC DPTR
MOV A,R0
SWAP A
MOV R1,A
MOV A,#0FFH
MOVX @R1,A
INC R1
MOV A,R7
MOV R6,A
LOOP:
MOVX A,@R1
JZ LOOPE
MOV A,R1
ANL A,#0FH
MOV R2,A
SWAP A
MOV R0,A
MOVX A,@R0
JNZ LOOPE
MOV A,R2
LCALL DATAIN
MOV A,#1
MOVX @R0,A
LOOPE:
INC R1
DJNZ R6,LOOP
LJMP BFS
BFSEND:
RET
SETNULL:
MOV A,#0FFH
MOV F,A
MOV R,A
RET
DATAIN:
PUSH DPH
PUSH DPL
INC R
MOV DPL,R
MOV DPH,#QUEUE
MOVX @DPTR,A
POP DPL
POP DPH
RET
DATAOUT:
PUSH DPH
PUSH DPL
INC F
MOV DPL,F
MOV DPH,#QUEUE
MOVX A,@DPTR
POP DPL
POP DPH
RET
;2000H: 09 41 42 43 44 45 46 47 48 49
;2010H: 00 00 01 00 00 00 00 00 01 00
;2020H: 00 01 00 01 00 00 00 00 00 01
;2030H: 00 00 01 00 01 00 01 00 00 00
;2040H: 00 00 00 01 00 01 00 00 00 00
;2050H: 00 00 00 00 01 00 01 01 00 00
;2060H: 00 00 00 01 00 01 00 01 00 01
;2070H: 00 00 00 00 00 01 01 00 01 00
;2080H: 00 01 00 00 00 00 00 01 00 01
;2090H: 00 00 01 00 00 00 01 00 01 00
GRA:
DB 09H,41H,42H,43H
DB 44H,45H,46H,47H
DB 48H,49H,00H,00H