$29
All assignments must be submitted through git. Please look at the Piazza guide on submitting assignments.
Please follow the naming conventions properly. Please look at the Piazza guide on the checking script. Run the checking script to make sure your les are named correctly. You will get no credit if the checking script fails!
Follow instructions, and carefully read through the input/output formats.
Clearly acknowledge sources, and mention if you discussed the problems with other students or groups. In all cases, the course policy on collaboration applies, and you should refrain from getting direct answers from anybody or any source. If in doubt, please ask the instructors or TAs.
Problem description
Main objective: Solve the n queens problems. You have to place n queens
on an n n chessboard such that no two attack each other. Important: the chessboard should be indexed starting from 1, in standard (x; y) coordinates. Thus, (4; 3) refers to the square in the 4th column and 3rd row.
We have a slight twist in this assignment. We will take as input the position of one queen, and have to generate a solution with a queen in this position.
Speci cs: You should provide a Make le. On running make, it should create \NQueens.jar". You should run the jar with two command line arguments: the rst is an input le, the second is the output le. For example, we would call the command java -jar NQueens.jar in.txt solution.txt. The le in.txt will have inputs to the main program (as described below), and the le solution.txt will have the desired solution.
Each line of the input le corresponds to a di erent instance. Each line of the input le will have three integers: the chessboard size, the column where the input queen is placed, and the row where the input queen is placed. For example, the le may look like:
7 3 2
4 1 1
The rst line means we have a 7 7 chessboard, with one queen placed at (3; 2). We wish to place 6 more queens without any attacking the other. The
1
second line means we have a 4 4 chessboard, with one queen at (1; 1). We wish to place 3 more queens without any attacks. So on and so forth.
Output: On running the command, the following should be printed in the output le. For each line of the input le, there is a line in the output le with the placement of queens.
If there is no solution to the problem, print \No solution" (with a newline at the end)
If there is a solution, print the position of each queen as <column <space <row <space followed by the position for the next queen. The positions should be in increasing order of column, so rst column rst, second col-umn second, etc. Please follow this format exactly, so that the checking script works for you. The last character on the line will be a space, then followed by a newline. This format should make your code easier to write.
For example, the output for the input described above could be
1 1 2 5 3 2 4 6 5 3 6 7 7 4
No solution
Observe how \3 2" is part of the rst solution, since we started with a queen there. The solution is not unique, so your code might nd some other placement. On the other hand, a 4 4 chessboard with a queen at (1; 1) has no solution.
Helper code: On the HW website, you will nd a java le that prints out your solution on chessboard (with queen positions) on to your console. This is extremely helpful in checking if your solution is correct. Compile and execute the java code on terminal directly using the commands below:
javac PrintSolutionHelper.java
java PrintSolutionHelper <your output file
For each line in your output le that has a list of queens positions, the console will print the chessboard with queens on then. (The code is actually pretty interesting!)
Example commands and outputs: On the HW website, you will nd a le HW1-examples.zip. Download and unzip it. There are four les:
test-input.txt, test-output.txt. If you run your program with in-put le test-inputs.txt, the output le should be exactly the same as test-outputs.txt. This will be used by the checking script and will need to be in your solution folder.
more-input.txt, more-output.txt. The former le has, ahem, more inputs, and the latter le has the outputs. For these instances, the corre-sponding outputs might not be unique. So, your solution may be di erent from what is given, since there can be numerous solutions.
What to submit: Push all your java source les. There is no restriction on format or how you name them. We only require that you have a make le called \Make le". On running make, it should provide an jar le called \NQueens.jar". The checking code uses the test les test-input.txt, test-output.txt.
Grading
You code should terminate within 3 minutes for all runs (maximum chessboard size will be 14). You get no credit for a run that does not provide a proper output.
(10 points) For a full solution as described above.
(8 points) Only solves the problem when the input queen is in the rst column. (This makes your recursive code a lot simpler to write.) When the input queen is not in the rst column, just print \No solution".
(6 points) Only solves for chessboards at most 6 6. You can set up 12 nested loops (6 for rows and 6 for columns) that simply try all possible placements of 6 queens.
(4 points) Only solves for chessboards at most 4 4.
3