ios - 逻辑上确定最短路径

标签 ios objective-c loops logic path-finding

到目前为止,我已经为位置创建了所有名称,现在我正在编写一个方法,该方法将返回一个数组,其中包含为达到最终目标所需的“位置”。然后,该数组将用于确定到达那里需要多少“时间”的方法。但是,我现在无法确定逻辑路径的方法。

因此,每个位置都会有它所连接的相对位置。示例;

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

这就是我的逻辑所带我去的地方,但是,每个其他人都代表了一种新的可能性。这可能比我预期的要多。那么我怎样才能把它写得更好呢?

最佳答案

您正在寻找图中两个节点之间的最短路径。 Dijkstra's Algorithm是针对此问题的一个很好且简单的广度优先搜索。

关于ios - 逻辑上确定最短路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33884275/

相关文章:

ios - UIApplicationDelegate 但对于每个 ViewController

ios - 是否应该限制允许用户查看激励广告的频率?

ios - 如何删除 iOS 中 NSString 中的第一个和最后一个 {}?

c# - While or and not 等于不工作?

Javascript函数问题

ios - 在 swift 中使用约束的 UICollectionView 单元格固定宽度和动态高度

iphone - 在 NSArray 中编辑已解析的 URL

ios - UIView 在 UIScrollview 中不移动

objective-c - 设置 NSTask 工作目录

python - 我想计算欧几里德距离并将其放入列表中。我收到范围错误,我缺少什么?