Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 逻辑确定最短路径_Ios_Objective C_Loops_Logic_Path Finding - Fatal编程技术网

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;
}