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

这里写图片描述

问题:广度搜索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;   
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值