深度优先搜索(汇编)
深度优先搜索(汇编)assume cs:code
code segment
RIGHT db "Copyright (c) 2007 asmedu"
DFSVdb 16 dup(0)
NODEV db "abcde"
NODEdb 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,1
mov byte ptr NODE,-1
DFSS:
push di
push ax
push bx
mov ax,di
mov bl,2
div bl
mov di,ax
mov al,DFSV;DFSV存放要搜索的字符
cmp NODEV,al
pop bx
pop ax
pop di
jne GoOn
mov DFSV,1
jmp DFSearchReturn
GoOn:
call DFSF1
cmp byte ptr DFSV,-1
je DFSS1
mov ax,0
mov al,DFSV
mov si,ax
mov ax,di
mov NODE,al
mov di,si
jmp DFSS
DFSS1:
cmp byte ptr NODE,-1
je DFSearchReturn
mov ax,0
mov al,NODE
mov si,ax
mov di,si
jmp GoOn
DFSearchReturn:
mov cx,10
mov si,0
DFSRS:
mov byte ptr NODE,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
mov di,0
DFSF1S:
cmp di,10
je DFSF1ReturnB
cmp byte ptr cs:,0
je DFSF1S1
cmp byte ptr NODE,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,1
mov ax,di
mov DFSV,al
jmp DFSF1Return
DFSF1ReturnB:
mov byte ptr DFSV,-1
DFSF1Return:
pop ax
pop di
pop si
ret
;--------function1 end
;-----------------------------------DFSearch end
code ends
end start
页:
[1]