以前用QB(Quick BASIC)写的算最短路径的程序DIM MGData(0 TO 999) AS INTEGER
DIM X AS INTEGER, Y AS INTEGER
DIM CurView(0 TO 33) AS INTEGER
DIM CurX AS INTEGER, CurY AS INTEGER
DIM ik AS STRING
DIM I AS INTEGER, J AS INTEGER
DIM OldX AS INTEGER, OldY AS INTEGER
DIM L AS INTEGER, MGX(I) AS INTEGER, MGY(I) AS INTEGER
DIM Pic1(0 TO 33) AS INTEGER, Pic2(0 TO 33) AS INTEGER, Pic3(0 TO 33) AS INTEGER, Pic4(0 TO 33) AS INTEGERSCREEN 13LINE (0, 0)-(7, 7), 15, B
GET (0, 0)-(7, 7), CurViewCONST FXC = 8
LINE (8 + 3, 0)-STEP(1, 7), FXC, B
LINE (8 + 2, 1)-STEP(3, 0), FXC
LINE (8 + 1, 2)-STEP(5, 0), FXC
GET (8, 0)-STEP(7, 7), Pic1
LINE (16 + 3, 0)-STEP(1, 7), FXC, B
LINE (16 + 2, 6)-STEP(3, 0), FXC
LINE (16 + 1, 5)-STEP(5, 0), FXC
GET (16, 0)-STEP(7, 7), Pic2
LINE (24, 3)-STEP(7, 1), FXC, B
LINE (24 + 1, 2)-STEP(0, 3), FXC
LINE (24 + 2, 1)-STEP(0, 5), FXC
GET (24, 0)-STEP(7, 7), Pic3
LINE (32, 3)-STEP(7, 1), FXC, B
LINE (32 + 6, 2)-STEP(0, 3), FXC
LINE (32 + 5, 1)-STEP(0, 5), FXC
GET (32, 0)-STEP(7, 7), Pic4'WHILE INKEY$ = "": WEND
CLSStart:
FOR I = 1 TO 999
MGData(I) = &H7FFF
NEXT I
LINE (0, 0)-STEP(7, 7), 10, BF
LINE (312, 192)-STEP(7, 7), 10, BF
PUT (CurX, CurY), CurView, XORDO
ik = INKEY$
SELECT CASE ik$
CASE CHR$(27)
EXIT DO CASE " "
PUT (CurX, CurY), CurView, XOR
IF POINT(CurX, CurY) = 0 THEN
LINE (CurX, CurY)-STEP(7, 7), 13, BF
LINE (CurX, CurY)-STEP(7, 7), 5, B
ELSEIF POINT(CurX, CurY) = 5 THEN
LINE (CurX, CurY)-STEP(7, 7), 0, BF
END IF
PUT (CurX, CurY), CurView, XOR CASE CHR$(0) + CHR$(72)
IF CurY > 0 THEN
PUT (CurX, CurY), CurView, XOR
CurY = CurY - 8
PUT (CurX, CurY), CurView, XOR END IF CASE CHR$(0) + CHR$(80)
IF CurY < 192 THEN
PUT (CurX, CurY), CurView, XOR
CurY = CurY + 8
PUT (CurX, CurY), CurView, XOR END IF CASE CHR$(0) + CHR$(75)
IF CurX > 0 THEN
PUT (CurX, CurY), CurView, XOR
CurX = CurX - 8
PUT (CurX, CurY), CurView, XOR END IF CASE CHR$(0) + CHR$(77)
IF CurX < 312 THEN
PUT (CurX, CurY), CurView, XOR
CurX = CurX + 8
PUT (CurX, CurY), CurView, XOR END IF CASE CHR$(0) + CHR$(141) 'Ctrl+Up
IF CurY > 0 THEN
PUT (CurX, CurY), CurView, XOR
IF POINT(CurX, CurY) = 0 THEN
LINE (CurX, CurY)-STEP(7, 7), 13, BF
LINE (CurX, CurY)-STEP(7, 7), 5, B
ELSEIF POINT(CurX, CurY) = 5 THEN
LINE (CurX, CurY)-STEP(7, 7), 0, BF
END IF
CurY = CurY - 8
PUT (CurX, CurY), CurView, XOR END IF CASE CHR$(0) + CHR$(145) 'Ctrl+Down
IF CurY < 192 THEN
PUT (CurX, CurY), CurView, XOR
IF POINT(CurX, CurY) = 0 THEN
LINE (CurX, CurY)-STEP(7, 7), 13, BF
LINE (CurX, CurY)-STEP(7, 7), 5, B
ELSEIF POINT(CurX, CurY) = 5 THEN
LINE (CurX, CurY)-STEP(7, 7), 0, BF
END IF
CurY = CurY + 8
PUT (CurX, CurY), CurView, XOR END IF CASE CHR$(0) + CHR$(115) 'Ctrl+Left
IF CurX > 0 THEN
PUT (CurX, CurY), CurView, XOR
IF POINT(CurX, CurY) = 0 THEN
LINE (CurX, CurY)-STEP(7, 7), 13, BF
LINE (CurX, CurY)-STEP(7, 7), 5, B
ELSEIF POINT(CurX, CurY) = 5 THEN
LINE (CurX, CurY)-STEP(7, 7), 0, BF
END IF
CurX = CurX - 8
PUT (CurX, CurY), CurView, XOR END IF CASE CHR$(0) + CHR$(116) 'Ctrl+Right
IF CurX < 312 THEN
PUT (CurX, CurY), CurView, XOR
IF POINT(CurX, CurY) = 0 THEN
LINE (CurX, CurY)-STEP(7, 7), 13, BF
LINE (CurX, CurY)-STEP(7, 7), 5, B
ELSEIF POINT(CurX, CurY) = 5 THEN
LINE (CurX, CurY)-STEP(7, 7), 0, BF
END IF
CurX = CurX + 8
PUT (CurX, CurY), CurView, XOR END IF CASE CHR$(0) + CHR$(60)'F2
CLS
GOTO Start
DIM X AS INTEGER, Y AS INTEGER
DIM CurView(0 TO 33) AS INTEGER
DIM CurX AS INTEGER, CurY AS INTEGER
DIM ik AS STRING
DIM I AS INTEGER, J AS INTEGER
DIM OldX AS INTEGER, OldY AS INTEGER
DIM L AS INTEGER, MGX(I) AS INTEGER, MGY(I) AS INTEGER
DIM Pic1(0 TO 33) AS INTEGER, Pic2(0 TO 33) AS INTEGER, Pic3(0 TO 33) AS INTEGER, Pic4(0 TO 33) AS INTEGERSCREEN 13LINE (0, 0)-(7, 7), 15, B
GET (0, 0)-(7, 7), CurViewCONST FXC = 8
LINE (8 + 3, 0)-STEP(1, 7), FXC, B
LINE (8 + 2, 1)-STEP(3, 0), FXC
LINE (8 + 1, 2)-STEP(5, 0), FXC
GET (8, 0)-STEP(7, 7), Pic1
LINE (16 + 3, 0)-STEP(1, 7), FXC, B
LINE (16 + 2, 6)-STEP(3, 0), FXC
LINE (16 + 1, 5)-STEP(5, 0), FXC
GET (16, 0)-STEP(7, 7), Pic2
LINE (24, 3)-STEP(7, 1), FXC, B
LINE (24 + 1, 2)-STEP(0, 3), FXC
LINE (24 + 2, 1)-STEP(0, 5), FXC
GET (24, 0)-STEP(7, 7), Pic3
LINE (32, 3)-STEP(7, 1), FXC, B
LINE (32 + 6, 2)-STEP(0, 3), FXC
LINE (32 + 5, 1)-STEP(0, 5), FXC
GET (32, 0)-STEP(7, 7), Pic4'WHILE INKEY$ = "": WEND
CLSStart:
FOR I = 1 TO 999
MGData(I) = &H7FFF
NEXT I
LINE (0, 0)-STEP(7, 7), 10, BF
LINE (312, 192)-STEP(7, 7), 10, BF
PUT (CurX, CurY), CurView, XORDO
ik = INKEY$
SELECT CASE ik$
CASE CHR$(27)
EXIT DO CASE " "
PUT (CurX, CurY), CurView, XOR
IF POINT(CurX, CurY) = 0 THEN
LINE (CurX, CurY)-STEP(7, 7), 13, BF
LINE (CurX, CurY)-STEP(7, 7), 5, B
ELSEIF POINT(CurX, CurY) = 5 THEN
LINE (CurX, CurY)-STEP(7, 7), 0, BF
END IF
PUT (CurX, CurY), CurView, XOR CASE CHR$(0) + CHR$(72)
IF CurY > 0 THEN
PUT (CurX, CurY), CurView, XOR
CurY = CurY - 8
PUT (CurX, CurY), CurView, XOR END IF CASE CHR$(0) + CHR$(80)
IF CurY < 192 THEN
PUT (CurX, CurY), CurView, XOR
CurY = CurY + 8
PUT (CurX, CurY), CurView, XOR END IF CASE CHR$(0) + CHR$(75)
IF CurX > 0 THEN
PUT (CurX, CurY), CurView, XOR
CurX = CurX - 8
PUT (CurX, CurY), CurView, XOR END IF CASE CHR$(0) + CHR$(77)
IF CurX < 312 THEN
PUT (CurX, CurY), CurView, XOR
CurX = CurX + 8
PUT (CurX, CurY), CurView, XOR END IF CASE CHR$(0) + CHR$(141) 'Ctrl+Up
IF CurY > 0 THEN
PUT (CurX, CurY), CurView, XOR
IF POINT(CurX, CurY) = 0 THEN
LINE (CurX, CurY)-STEP(7, 7), 13, BF
LINE (CurX, CurY)-STEP(7, 7), 5, B
ELSEIF POINT(CurX, CurY) = 5 THEN
LINE (CurX, CurY)-STEP(7, 7), 0, BF
END IF
CurY = CurY - 8
PUT (CurX, CurY), CurView, XOR END IF CASE CHR$(0) + CHR$(145) 'Ctrl+Down
IF CurY < 192 THEN
PUT (CurX, CurY), CurView, XOR
IF POINT(CurX, CurY) = 0 THEN
LINE (CurX, CurY)-STEP(7, 7), 13, BF
LINE (CurX, CurY)-STEP(7, 7), 5, B
ELSEIF POINT(CurX, CurY) = 5 THEN
LINE (CurX, CurY)-STEP(7, 7), 0, BF
END IF
CurY = CurY + 8
PUT (CurX, CurY), CurView, XOR END IF CASE CHR$(0) + CHR$(115) 'Ctrl+Left
IF CurX > 0 THEN
PUT (CurX, CurY), CurView, XOR
IF POINT(CurX, CurY) = 0 THEN
LINE (CurX, CurY)-STEP(7, 7), 13, BF
LINE (CurX, CurY)-STEP(7, 7), 5, B
ELSEIF POINT(CurX, CurY) = 5 THEN
LINE (CurX, CurY)-STEP(7, 7), 0, BF
END IF
CurX = CurX - 8
PUT (CurX, CurY), CurView, XOR END IF CASE CHR$(0) + CHR$(116) 'Ctrl+Right
IF CurX < 312 THEN
PUT (CurX, CurY), CurView, XOR
IF POINT(CurX, CurY) = 0 THEN
LINE (CurX, CurY)-STEP(7, 7), 13, BF
LINE (CurX, CurY)-STEP(7, 7), 5, B
ELSEIF POINT(CurX, CurY) = 5 THEN
LINE (CurX, CurY)-STEP(7, 7), 0, BF
END IF
CurX = CurX + 8
PUT (CurX, CurY), CurView, XOR END IF CASE CHR$(0) + CHR$(60)'F2
CLS
GOTO Start
解决方案 »
- 请问如何动态填加listview控件啊。不管该控件有没有在工程中引用。
- 复杂的数据库联接
- 怎样判断出一张图片里的女人有脱衣服?或者一个男人不穿衣服?
- VBA巨集问题
- 开发一个进销存系统应该怎么办呢?
- 急:在VB5.0有DBGrid,可在VB6.0中没有。怎么使DBGrid可用?在线等候!
- 有谁知道“Visual Basic 编程标准”这个文档在哪里可以找到??
- 求助:如何在自己的程序里控制其它应用程序,主要实现对另一应用程序的鼠标定时自动单击
- treeview的背景能不能设成透明
- 工具推荐:资源提取器(可提取icl、exe、dll等文件中的ico、bmp、avi、html、gif、jpg)
- vb中从网上下载文件的语句如何写?急,各位大虾帮忙。
- 判斷一個網址或網頁是否存在能夠訪問有什么方法可以做到
PUT (CurX, CurY), CurView, XOR
I = 0
DO
L = 0
FOR J = 0 TO 999
IF MGData(J) = I THEN
IF J = 999 THEN EXIT DO
X = J MOD 40: Y = INT(J / 40)
IF X - 1 >= 0 THEN
IF POINT((X - 1) * 8, Y * 8) <> 5 THEN
IF I + 1 < MGData((X - 1) + Y * 40) THEN
MGData((X - 1) + Y * 40) = I + 1
L = -1
END IF
END IF
END IF
IF Y - 1 >= 0 THEN
IF POINT(X * 8, (Y - 1) * 8) <> 5 THEN
IF I + 1 < MGData(X + (Y - 1) * 40) THEN
MGData(X + (Y - 1) * 40) = I + 1
L = -1
END IF
END IF
END IF
IF X + 1 <= 39 THEN
IF POINT((X + 1) * 8, Y * 8) <> 5 THEN
IF I + 1 < MGData((X + 1) + Y * 40) THEN
MGData((X + 1) + Y * 40) = I + 1
L = -1
END IF
END IF
END IF
IF Y + 1 <= 24 THEN
IF POINT(X * 8, (Y + 1) * 8) <> 5 THEN
IF I + 1 < MGData(X + (Y + 1) * 40) THEN
MGData(X + (Y + 1) * 40) = I + 1
L = -1
END IF
END IF
END IF END IF NEXT J
I = I + 1
IF L = 0 THEN MGData(999) = 0: EXIT DO
LOOP
IF MGData(999) THEN
L = MGData(999) - 1
REDIM MGX(0 TO L) AS INTEGER
REDIM MGY(0 TO L) AS INTEGER
MGX(L) = 39: MGY(L) = 24
DO WHILE L
X = MGX(L)
Y = MGY(L)
DO
IF Y - 1 >= 0 THEN
IF MGData(X + (Y - 1) * 40) = L THEN
L = L - 1
MGX(L) = X
MGY(L) = Y - 1
MGData(X + (Y - 1) * 40) = &H7FFF
EXIT DO
END IF
END IF
IF X - 1 >= 0 THEN
IF MGData((X - 1) + Y * 40) = L THEN
L = L - 1
MGX(L) = X - 1
MGY(L) = Y
MGData((X - 1) + Y * 40) = &H7FFF
EXIT DO
END IF
END IF
IF Y + 1 <= 24 THEN
IF MGData(X + (Y + 1) * 40) = L THEN
L = L - 1
MGX(L) = X
MGY(L) = Y + 1
MGData(X + (Y + 1) * 40) = &H7FFF
EXIT DO
END IF
END IF
IF X + 1 <= 39 THEN
IF MGData((X + 1) + Y * 40) = L THEN
L = L - 1
MGX(L) = X + 1
MGY(L) = Y
MGData((X + 1) + Y * 40) = &H7FFF
EXIT DO
END IF
END IF
L = L + 1
LOOP WHILE 0
LOOP
X = 0: Y = 0
FOR I = 0 TO UBOUND(MGX) - 1
LINE (MGX(I) * 8, MGY(I) * 8)-STEP(7, 7), 2, BF
IF MGX(I) = X THEN
IF MGY(I) > Y THEN
PUT (MGX(I) * 8, MGY(I) * 8), Pic2, XOR
ELSE
PUT (MGX(I) * 8, MGY(I) * 8), Pic1, XOR
END IF
ELSE
IF MGX(I) > X THEN
PUT (MGX(I) * 8, MGY(I) * 8), Pic4, XOR
ELSE
PUT (MGX(I) * 8, MGY(I) * 8), Pic3, XOR
END IF
END IF
X = MGX(I)
Y = MGY(I)
NEXT I
ELSE
LOCATE 1, 1
PRINT "No!"
END IF
BEEP
WHILE INKEY$ = "": WEND
FOR I = 0 TO 39
FOR J = 0 TO 24
IF POINT(I * 8, J * 8) <> 5 THEN LINE (I * 8, J * 8)-STEP(7, 7), 0, BF
NEXT J
NEXT I
GOTO Start
END SELECTLOOPEND上下左右移动、空格键设置/清除障碍物,F2清空,F5计算路径,Esc退出
广度搜索!
找本数据结构的书看看!
先广搜索,搜索很麻烦的,还需要建图