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

来源:互联网 发布:网络使用管理规定 编辑:程序博客网 时间:2024/06/06 06:39

这里写图片描述

问题:广度搜索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;   }
原创粉丝点击