Ios 逻辑确定最短路径
到目前为止,我已经为这些职位创建了所有的名称,现在我正在编写一个方法,该方法将返回一个数组,用于“职位”以达到最终目标。然后,该数组将用于一个方法,以确定到达该方法所需的“时间”。然而,我现在必须确定一个逻辑路径的方法 因此,每个位置都有它所连接的相对位置。榜样Ios 逻辑确定最短路径,ios,objective-c,loops,logic,path-finding,Ios,Objective C,Loops,Logic,Path Finding,到目前为止,我已经为这些职位创建了所有的名称,现在我正在编写一个方法,该方法将返回一个数组,用于“职位”以达到最终目标。然后,该数组将用于一个方法,以确定到达该方法所需的“时间”。然而,我现在必须确定一个逻辑路径的方法 因此,每个位置都有它所连接的相对位置。榜样 NSArray *posAlphaConnections = [[NSArray alloc] initWithObjects:@"posDelta",@"posBravo",@"posFoxtrot", nil]; NSDictio
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*)返回路径带玩家:(玩家类*)玩家和目标:(NSString*)目标{
NSString*currentPosition=player.position;
NSLog(@“当前位置%@”,当前位置);
NSArray*connections=[[u positions valueForKey:currentPosition]valueForKey:@“connections”];
__block BOOL pathFound=false;
对于(int i=0;i<[连接计数];i++){
if([connections[i]IsequalString:goal]){
pathFound=true;
}否则{
对于(int j=0;j<[[u positions valueForKey:connections[i]]valueForKey:@“connections”]count];j++){
如果([[[u positions valueForKey:connections[i]]valueForKey:@“connections”][j]IsequalString:goal]){
pathFound=true;
}
}
}
}
如果(路径发现){
NSLog(@“找到%@的路径”,目标);
}否则{
NSLog(@“未找到%@的路径”,目标);
}
返回0;
}
这就是我的逻辑,然而,每一个都将代表一种新的可能性。。这可能比我想象的要多。。那么我怎样才能写得更好呢?您正在寻找图形中两个节点之间的最短路径。丹尼尔:我看到了你的编辑,文本对我来说毫无意义,我不会尝试对代码进行反向工程。好的,谢谢你提供了算法。我相信它适用于99%这样的情况。
-(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;
}