assume cs:code
code segment
RIGHT db "Copyright (c) 2007 www.asmedu.net#"
DFSV db 16 dup(0)
NODEV db "abcde"
NODE db 0,0, 0,0, 0,0, 0,0, 0,0
NODES dw NODE1,NODE2,NODE3,NODE4,NODE5
NODE1 dw 0, 1, 0, 1, 0
NODE2 dw 1, 0, 1, 0, 1
NODE3 dw 0, 1, 0, 1, 1
NODE4 dw 1, 0, 1, 0, 0
NODE5 dw 0, 1, 1, 0, 0
start:
;图有五个节点
mov ax,cs
mov ds,ax
call DFSearch
mov ax,4c00h
int 21h
;-----------------------------------DFSearch start
;深度优先搜索
DFSearch:
push si
push di
push ax
push dx
push cx
push bx
mov si,0
mov di,0
mov dl,25
mov byte ptr NODE[di],1
mov byte ptr NODE[di + 1],-1
DFSS:
push di
push ax
push bx
mov ax,di
mov bl,2
div bl
mov di,ax
mov al,DFSV[1] ;DFSV[1]存放要搜索的字符
cmp NODEV[di],al
pop bx
pop ax
pop di
jne GoOn
mov DFSV[2],1
jmp DFSearchReturn
GoOn:
call DFSF1
cmp byte ptr DFSV[0],-1
je DFSS1
mov ax,0
mov al,DFSV[0]
mov si,ax
mov ax,di
mov NODE[si + 1],al
mov di,si
jmp DFSS
DFSS1:
cmp byte ptr NODE[di + 1],-1
je DFSearchReturn
mov ax,0
mov al,NODE[di + 1]
mov si,ax
mov di,si
jmp GoOn
DFSearchReturn:
mov cx,10
mov si,0
DFSRS:
mov byte ptr NODE[si],0
inc si
loop DFSRS
pop bx
pop cx
pop dx
pop ax
pop di
pop si
ret
;--------function1 start
;指定节点是否有未访问的邻近节点
DFSF1:
push si
push di
push ax
mov si,NODES[si]
mov di,0
DFSF1S:
cmp di,10
je DFSF1ReturnB
cmp byte ptr cs:[si],0
je DFSF1S1
cmp byte ptr NODE[di],0
je DFSF1ReturnA
add si,2
add di,2
jmp DFSF1S
DFSF1S1:
add si,2
add di,2
jmp DFSF1S
DFSF1ReturnA:
mov word ptr NODE[di],1
mov ax,di
mov DFSV[0],al
jmp DFSF1Return
DFSF1ReturnB:
mov byte ptr DFSV[0],-1
DFSF1Return:
pop ax
pop di
pop si
ret
;--------function1 end
;-----------------------------------DFSearch end
code ends
end start
[07/10/15] |