Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::iter::once;
- fn form_groups(students: &[Vec<usize>]) -> Vec<Vec<usize>> {
- let mut groups: Vec<Vec<usize>> = Vec::new();
- for (student, friends) in students.iter().enumerate() {
- let group = groups.iter_mut().find(|g| g.contains(&student));
- match group {
- None => groups.push(once(student).chain(friends.iter().copied()).collect()),
- Some(g) => {
- g.extend(friends.iter().copied());
- }
- }
- }
- for group in &mut groups {
- group.sort_unstable();
- group.dedup();
- }
- groups
- }
- fn main() {
- let students = vec![
- vec![1, 2],
- vec![0, 5],
- vec![0],
- vec![6],
- vec![],
- vec![5],
- vec![6],
- ];
- let groups = form_groups(&students);
- println!(
- "the number of friend groups in the class is {};\n{:?}",
- groups.len(),
- groups
- );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement