fuchou-angle 发表于 2009-7-2 15:56:15

深度优先搜索(汇编)

深度优先搜索(汇编)

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]
查看完整版本: 深度优先搜索(汇编)