## Description

Overview

Breadth First Search (BFS) and Depth First Search (DFS) are well-known graph traverse

algorithms. In this project, you will need to implement BFS and DFS algorithms in order to solve

the given problem.

Farmer, Rabbit, Fox and Bag of Carrots

A farmer with his rabbit, bag of carrots and fox came to the east side of a river that they wish to

cross. The farmer has a boat at the river’s edge, but only he can row. The boat can only hold

single thing(rabbit, bag of carrots or fox) in addition to the rower at any one time. If the fox is left

alone with the rabbit, the fox may eat it. Similarly if the rabbit is left alone with the bag of carrots,

the rabbit will eat it. How can the farmer get to the west side of the river so that all four arrive

safely?

A) Implementation

1) Formalize this problem in a well-defined graph form and present your state and action

representations in detail.

2) Run both BFS and DFS algorithms and analyze the results in terms of:

● the number of the visited nodes

● the maximum number of nodes kept in the memory

● the running time.

● the number of move steps on the found solution.

3) The algorithm (BFS or DFS) to be used for search should be chosen by a command line

argument as in the given example.

4) When the solution is found, you should print the sequence of moves so that all four

arrive safely to the other side of the river.

Your program should compile and run using the following commands:

g++ sourcecode.cpp –o project1

./project1 bfs

./project1 dfs

Sample Output: The numbers may not reflect the real results.

> ./project1 dfs

Algorithm: DFS

Number of the visited nodes: 21

Maximum number of nodes kept in the memory: 9

Running time: 0.34 seconds

Solution move count: 9

Farmer Rabbit Carrot Fox ||

(Farmer, Rabbit, > )

Carrot Fox || Farmer Rabbit

(Farmer, <)
Farmer Carrot Fox || Rabbit
(Farmer, Carrot, > )

Fox || Farmer Carrot Rabbit

…

|| Farmer Rabbit Carrot Fox

B) Report

1) Present your problem formulation, state and action representations in detail.

2) How does your algorithms work?

a) Write your pseudo-code.

b) Show complexity of your algorithm on pseudo-code.

3) In Depth-First Search algorithm, why should we maintain a list of discovered nodes?

4) Is the graph constructed by the given problem formulation a bipartite graph? Why or why

not? (Implementation is not required for this part.)

5) Analyze and explain the algorithm results in terms of:

● the number of visited nodes

● the maximum number of nodes kept in the memory

● the running time.

● the number of move steps on the found solution.

Note: If you have any questions, please feel free to contact Res. Asst. Çağatay Koç via e-mail

(kocca@itu.edu.tr).

Policy:

● You may discuss the problem addressed by the project at an abstract level with your

classmates, but you should not share or copy code from your classmates or from the

Internet.You should submit your own, individual project.

● Academic dishonesty including but not limited to cheating, plagiarism,

collaboration is unacceptable and subject to disciplinary actions.

Submission Instructions:

● Please submit your homework through Ninova e-Learning System.

● You must submit all your source code in a single cpp file and a softcopy report

(PDF). You can define multiple classes in a single cpp file.

● All your code must be written in C++, and we must be able to compile and run on it on

ITU’s Linux Server (you can access it through SSH) using g++.

● When you write your code, try to follow an object-oriented methodology with well-chosen

variable, method, and class names and comments where necessary.

● Your code must compile without any errors; otherwise, you may get a grade of zero on

the assignment.

● You should be aware that the Ninova e-Learning System clock may not be synchronized

with your computer, watch, or cell phone. Do not e-mail the teaching assistant or the

instructors your submission after the Ninova site submission has closed. If you have

submitted to Ninova once and want to make any changes to your report, you should do it

before the Ninova submission system closes. Your changes will not be accepted by

e-mail. Connectivity problems to the Internet or to Ninova in the last few minutes are not

valid excuses for being unable to submit. You should not risk leaving your submission to

the last few minutes. After uploading to Ninova, check to make sure that your project

appears there.