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;
}
這裏是我的邏輯是帶我,但是,每個人會代表一種新的可能性..這,可能會超過我期待..所以,我該怎麼寫這個更好?
@Daniel:我看到你的編輯,文本對我來說沒有任何意義,我也不打算對代碼進行反向工程。 – Beta
好吧,謝謝你提供的算法。我相信它適合99%這樣的案例。 – Daniel