OC实现算法(二)- 广度优先搜索

OC实现算法(二)- 广度优先搜索_第1张图片

问题:广度搜索A到D的最短路径

队列
广度优先搜索,按顺序按顺序添加检查,队列数据结构可以实现这种目的,队列是一种先进先出的数据结构
OC中一般可变数组实现,队列的这种功能
实现

 _dic = @{@"A":@[@"B",@"F"],@"B":@[@"C"],@"C":@[@"D"],@"D":@[],@"E":@[@"C"],@"F":@[@"E",@"G"],@"G":@[@"C"]};
    BOOL lj = [self search:@"D"];
    if(lj){
        NSLog(@"存在A到D的路径");
    }else{
        NSLog(@"不存在A到D的路径");
    }

//广度搜索

-(BOOL)search:(NSString *)str{
    //查找队列
    NSMutableArray *array = [NSMutableArray array];
    [array addObject:@"A"];
    //已经查找过的节点
    NSMutableArray *searchArray = [NSMutableArray array];
    while (array.count) {//直到队列为空
        //去除队列最前面一个节点
        NSString *name = array.firstObject;
        [array removeObjectAtIndex:0];

        if (![searchArray containsObject:array.firstObject]){//没有检查过
            if ([name isEqualToString:str]) {//找到节点
                return YES;
            }else{
                //这个节点检查过
                [searchArray addObject:name];
                //将这个节点对应的邻居节点加入查找队列
                [array addObjectsFromArray:[_dic valueForKey:name]];

            }
         }
    }
    return NO;   
}

你可能感兴趣的:(OC实现算法)