Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

I need help with Dr.Racket (Scheme, Lisp) . I just have to Implement \"find-solu

ID: 3798996 • Letter: I

Question

I need help with Dr.Racket (Scheme, Lisp).

I just have to Implement "find-solution using A* search". I don't know what it is I just know that it's a Heuristic-based and it combines DFS and Breath-First Search. Please help.

Main ideas of A* search
. not every sequence needs to be explored
. visited successors can be ignored
. explore the most promising sequence first

ACCUMULATOR INVARIANTS:
. paths is a list of all seqsstarting at b generated so far that have no repeated nodes
. visited is the list of boards encountered on all sequences explored so far

However, below is an example of a Breath-First Search.

; find-solution-bfs: board --> seq

; Purpose: To find a solution to the given board

(define (find-solution-bfs b)

    (local [; search-paths: lseq --> seq

              ; Purpose: To find a solution to b by searching all possible paths

              ; ACCUMULATOR INVARIANT:
              ; paths is all paths starting at b generated so far from shortest to longest
              (define (search-paths paths)
                   (cond [(equal? (first (first paths)) WIN) (first paths)]
                         [else
                            (local [(define children (generate-children (first (first paths))))
                                (define new-paths (map (lambda (c) (cons c (first paths)))
                                                                           children))]
                 (search-paths (append (rest paths) new-paths)))]))]
(reverse (search-paths (list (list b))))))

Explanation / Answer

Program to print BFS traversal:


#include<iostream>
#include <list>

using namespace std;

// This class represents a directed graph using adjacency list representation
class Graph
{
int V; // No. of vertices
list<int> *adj; // Pointer to an array containing adjacency lists
public:
Graph(int V); // Constructor
void addEdge(int v, int w); // function to add an edge to graph
void BFS(int s); // prints BFS traversal from a given source s
};

Graph::Graph(int V)
{
this->V = V;
adj = new list<int>[V];
}

void Graph::addEdge(int v, int w)
{
adj[v].push_back(w); // Add w to v’s list.
}

void Graph::BFS(int s)
{
// Mark all the vertices as not visited
bool *visited = new bool[V];
for(int i = 0; i < V; i++)
visited[i] = false;

// Create a queue for BFS
list<int> queue;

// Mark the current node as visited and enqueue it
visited[s] = true;
queue.push_back(s);

// 'i' will be used to get all adjacent vertices of a vertex
list<int>::iterator i;

while(!queue.empty())
{
// Dequeue a vertex from queue and print it
s = queue.front();
cout << s << " ";
queue.pop_front();

// Get all adjacent vertices of the dequeued vertex s
// If a adjacent has not been visited, then mark it visited
// and enqueue it
for(i = adj[s].begin(); i != adj[s].end(); ++i)
{
if(!visited[*i])
{
visited[*i] = true;
queue.push_back(*i);
}
}
}
}

// Driver program to test methods of graph class
int main()
{
// Create a graph given in the above diagram
Graph g(4);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 0);
g.addEdge(2, 3);
g.addEdge(3, 3);

cout << "Following is Breadth First Traversal " << "(starting from vertex 2) ";
g.BFS(2);

return 0;
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote