问题:广度搜索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;
}