2015-11-24 70 views
0

到目前爲止,我已經創建了職位的所有名稱,現在我正在編寫一個方法,該方法將返回一個數組,用於需要採取的「職位」以實現最終目標。然後,這個數組將用於一個方法,以確定它應該花多少時間到達那裏。但是,我現在堅持要爲邏輯路徑確定一種方法。邏輯確定最短路徑

因此,每個位置都會有相對的位置。例;

NSArray *posAlphaConnections = [[NSArray alloc] initWithObjects:@"posDelta",@"posBravo",@"posFoxtrot", nil]; 

NSDictionary *posAlpha = @{@"connections":posAlphaConnections, 
          @"time":positionCrossTimeAlpha}; 

_positions = @{  @"posAlpha":posAlpha, 
        @"posBra.... 
        }; //NSDictionary 

所以你結束了一個途徑

問題是

-(NSArray *)returnPathWithPlayer:(PlayerClass *)player andGoal:(NSString *)goal { 

    NSString *currentPosition = player.position; 

    //Up to here 

    return 0; 
} 

目前我在心中思考..我應該運行一個循環爲每一個可能的連接..直到達到目標,然後保持返回最短距離的路線。然後使用該路線..但是,我不能邏輯思考如何寫這個。

PS:我還會補充一點,每個職位都有一個尺寸變量,用於跨越該位置所需的「時間長度」。所以這也應該被考慮在內,而不是最少量的頭寸,最少的時間量應該是優先考慮的。

編輯:

-(NSArray *)returnPathWithPlayer:(PlayerClass *)player andGoal:(NSString *)goal { 

    NSString *currentPosition = player.position; 

    NSLog(@"current Position %@", currentPosition); 

    NSArray *connections = [[_positions valueForKey:currentPosition] valueForKey:@"connections"]; 

    __block BOOL pathFound = false; 

    for (int i = 0; i < [connections count]; i++) { 
     if ([connections[i] isEqualToString:goal]) { 
      pathFound = true; 
     } else { 
      for (int j = 0; j < [[[_positions valueForKey:connections[i]] valueForKey:@"connections"] count]; j++) { 
       if ([[[_positions valueForKey:connections[i]] valueForKey:@"connections"][j] isEqualToString:goal]) { 
        pathFound = true; 
       } 
      } 
     } 
    } 

    if (pathFound) { 
     NSLog(@"path to %@ found", goal); 
    } else { 
     NSLog(@"path to %@ not-found", goal); 
    } 

    return 0; 
} 

這裏是我的邏輯是帶我,但是,每個人會代表一種新的可能性..這,可能會超過我期待..所以,我該怎麼寫這個更好?

回答

2

您正在尋找圖形中兩個節點之間的最短路徑。 Dijkstra's Algorithm是一個很好的和簡單的廣度優先搜索這個問題。

+0

@Daniel:我看到你的編輯,文本對我來說沒有任何意義,我也不打算對代碼進行反向工程。 – Beta

+0

好吧,謝謝你提供的算法。我相信它適合99%這樣的案例。 – Daniel