Показать сообщение отдельно
Старый 30.01.2009, 23:45   #2
Putin
Оператор ЭВМ
 
Регистрация: 11.03.2007
Сообщений: 46
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Волновой алгоритм, помогите

Сделав несколько раз так и так , после чего переписав все сначала у меня получилось! Пока это еще не алгоритм поиска пути но уже присваивать значения клеткам вроде получилось. Таким образом задача 1 из n выполнена)).
Нижеприведенный код показывает значения клеток от стартовой клетки до клетки назначения в уменьшающемся порядке, таким образом выбирая соседнию клеку с наименьшим значением можно добраться до цели. Теперь пытаюсь разобраться как мне бы это бЫ .... еще неопредилися что, но чтоб вырисовывался маршрут .

Прошу уважаемых администраторов переименовать топик (так как незнаю могули сам) в "Чайник ищет путь" .

SeedRnd MilliSecs()
Graphics 640480,16,2
SetBuffer BackBuffer
()

Global 
Ni

Const Nk=20

Dim P
(9,9)
Dim R(8,8)

Ni=0

fon1
=LoadFont ("arrial"19)
SetFont fon1



;-----------------------;-------------parametrs of MAP's cells-------------
For i=0 To 9 ;boarder 1 ; M
    For j=0 To 0        ; A
        P(i,j)=888      ; P
    Next                ;
Next                    ; B
For i=0 To 0;boarder  2 ; O
    For j=0 To 9        ; A
        P(i,j)=888      ; R
    Next                ; D
Next                    ; E
For i=0 To 9;boarder  3    ; R
    For j=9 To 9        ; S
        P(i,j)=888        ;
    Next                ; (marks as 888)
Next                    ;
For i=9 To 9;boarder  4    ;
    For j=0 To 9        ;
        P(i,j)=888        ;
    Next                ;
Next                    ;
;-----------------------;


;-----------------------;
For i=1 To 8            ; 
    For j=1 To 8        ; MAP'
s FREE CELLS (marks as 333
        
P(i,j)=333        ;
    
Next                ;  
Next                    ;                                      
;-----------------------;

;-----------------------; 
CHANGEBLE PARAMETRS
P
(3,4)=888                ;
P(3,2)=888                ;
P(3,3)=888                
P(3,5)=888                BLOKS on MAP (marks as 888)
P(4,4)=888                
P(5,4)=888                
P(6,4)=888                ;                                              
P(1,2)=555                START
P
(7,8)=0                FINISH
;-----------------------;---------------------------------------------------




Repeat

    Cls

;-------------------------------------------;
    For 
i=0 To 9                            D
        
For j=0 To 9                        R
            
If P(i,j)=888 Then                A
                Color 255
,255,255            W
                Rect i
*40,j*40,40,40,0        ;
                
Color 180,100,108            M
                Rect 4
+i*40,4+j*40,32,32,1    A
            
EndIf                            ; P
            
If P(i,j)=333 Then                
                
Color 255,255,255            C
                Rect i
*40,j*40,40,40,0        O
            
EndIf                            ; D
            
If P(i,j)=0 Then                E
                Color 255
,255,255            ;
                
Rect i*40,j*40,40,40,0        ;
                
Oval 5+i*40,5+j*40,30,30,1    ;                
            EndIf                            ;
            If 
P(i,j)=555 Then                ;
                
Color 255,255,255            ;  
                
Rect i*40,j*40,40,40,0        ;    
                
Color 145,255,225            ;                
                
Oval 5+i*40,5+j*40,30,30,1    ;                
            EndIf                            ;                        
        
Next                                 ;
    
Next                                    ;
;-------------------------------------------;


;-------------------------------------------;
    For 
i=0 To 9                            P
        
For j=0 To 9                        R
            
If P(i,j)=888 Then                I
                Color 4
,5,255                N
                Text 6
+i*40,9+j*40,P(i,j)    ; T
            
ElseIf    P(i,j)=333 Then            ;
                
Color 0,200,0                T
                Text 6
+i*40,9+j*40,P(i,j)    ; E
            
ElseIf P(i,j)=555 Then            X
                Color 255
,55,97                T
                Text 6
+i*40,9+j*40,P(i,j)    ; 
            ElseIf    
P(i,j)=0 Then            
                
Color 255,55,97                
                
Text 16+i*40,9+j*40,P(i,j)    ;
            Else                             ;
                
Color 255,0,0                ;
                
Text 16+i*40,9+j*40,P(i,j)    ;
            EndIf                            ;
            
Color 255,255,255                ;
            
Rect i*40,j*40,40,40,0            ;
        
Next                                ;
    
Next                                    ;
;-------------------------------------------;

;----------------------------------------------------;
    For 
Ni=0 To Nk
        
For i=1 To 8
            
For j=1 To 8
                
If P(i,j)=Ni Then
                    
If P(i+1,j)=333 P(i+1,j)=Ni+1
                    
If P(i-1,j)=333 P(i-1,j)=Ni+1
                    
If P(i,j+1)=333 P(i,j+1)=Ni+1
                    
If P(i,j-1)=333 P(i,j-1)=Ni+1
                End 
If
            
Next
        Next
    Next
;----------------------------------------------------;


    
Flip
    
    Until KeyHit
(28)

End 
(Offline)
 
Ответить с цитированием