1
use std::collections::{HashSet, VecDeque};3
pub fn can_cross(stones: Vec<i32>) -> bool {4
if stones[0] != stones[1] - 1 {8
let mut queue = VecDeque::from([(stones[1], 1)]);9
let mut visited = HashSet::from([(stones[1], 1)]);11
let valid_stones = |stone: i32| {12
let (min, max) = (1.max(stone - 1), stone + 2);14
.filter_map(|stone| stones.binary_search(&stone).ok())15
.map(|idx| stones[idx])18
while let Some((loc, leap)) = queue.pop_front() {19
if Some(&loc) == stones.last() {23
for stone in valid_stones(loc + leap) {24
let path = (stone, stone - loc);25
if visited.insert(path) {