I teach 3rd-year algorithms for CS majors at a Canadian university and it always seems a fair number of students arrive not really understanding basic things like breadth-first search. This year I'm planning to give them a homework assignment on the first day that's due a week later so we can have it marked and returned before the end of the first two weeks, which is the deadline for them to drop the course and get their money back.
For the assignment, I'm asking them to write a program that reads a 3 x 3 grid of numbers representing a puzzle with 8 sliding tiles numbered 1 to 8 and an empty space (shown as 0 on the grid), and prints the minimum number of moves needed to reach that configuration from the starting configuration or "unreachable" if that configuration is unreachable. (The starting configuation has 1, 2, 3 in the top row, 4, 5, 6 in the next row, and 7, 8 and the empty space 0 in the bottom row, and a move consists of sliding a tile that's horizontally or vertically adjacent to the empty space, into the empty space.) I'm telling them to use breadth-first search and they can use C, C++ or Java (or any other language the TAs and markers are ok with).
I'm pretty sure some of them are going to complain that I'm being really mean by giving them an assignment on the first day. Given that they're they've already spent two years (and usually $50K+ on tuition) in a university CS major, I think being able to do this assignment is a necessary (not sufficient) condition for even starting 3rd-year algorithms.
Am I being unreasonable?
(I'm posting this a month in advance so I can change my plans if Stackexchange says I really am mean; otherwise, I can show complaining students that at least Stackexchange backs me up. :)