Best First Search

Implementation of Best First Search
#include<iostream>
#include<cstdlib>
using namespace std;
char goal;
void create();
void dfs();
void bfs();
struct node
{
   bool visited;
   int h;
   char value;
   int num;
   struct node *child[10];
};
int oindex=0,kids;
void display()
{
   for(int i=0;i<kids;i++)
       if(open[i]->visited == true)
           cout<<endl<<open[i]->value;
}
node *search(char c)
{
   for(int i=0;i<kids;i++)
   {
       if(L[i]->value == c)
       return L[i];
   }
}
bool allvisited()
{
   for(int i=0;i<kids;i++)
   {
       if(L[i]->visited == false)
           return false;
   }
   return true;
}
void BestFirstSearch(node *root,char c)
{
   node *temp;
   int total=0,oindex=0;
   open[oindex]=root;
   oindex++;
   cout<<endl<<"PATH: ";
   while(!allvisited())
   {
       int smallest=100;
       for(int i=0;i<oindex;i++)
           if(((open[i]->h)<smallest) && ((open[i]->visited) == false))
       {
           temp = open[i];
           smallest = open[i]->h;
       }
       total += temp->h;
       cout<<temp->value<<" "; //display current node
       if(c==temp->value)  //check if current node is equal to goal
       {
           c='y';
           cout<<endl<<"Goal Reached";
           break;
       }
       temp->visited = true;
       for(int j=0;j<temp->num;j++) //current node to open[] iff not visted
       {
           if(temp->child[j]->visited == false)
           {

               open[oindex] = temp->child[j];
               oindex++;
           }
       }
   }
   if(c != 'y')
       cout<<"Goal Not Reached.";
   cout<<endl<<"Cost = "<<total<<endl; //display total cost
}
int main()
{
   char x;
   cout<<"Enter the number of nodes : ";
   cin>>kids;
   for(int i=0;i<kids;i++)
   {
       node *temp = new node;
       L[i] = temp;
       cout<<"Enter Node "<<i+1<<" : ";
       cin>>temp->value;
       cout<<"Enter Node "<<i+1<<" Heuristic : ";
       cin>>temp->h;
       cout<<"Enter Number of Children of Node "<<i+1<<" : ";
       cin>>temp->num;
       temp->visited = false;
   }
   for(int i=0;i<kids;i++)
   {
       if(L[i]->num > 0)
       {
           cout<<"Enter the Nodes connected to "<<L[i]->value<<" : ";
           for(int j=0;j<L[i]->num;j++)
           {
               char c;
               cin>>c;
               L[i]->child[j] = search(c);
           }
       }
   }
   cout<<"Enter the element to be searched : ";
   cin>>x;
   BestFirstSearch(L[0],x);
   return 0;
}

OUTPUT:
Enter the number of nodes: 7
Enter Node 1: A
Enter Node 1 Heuristic: 10
Enter Number of Children of Node 1: 2
Enter Node 2: B
Enter Node 2 Heuristic: 2
Enter Number of Children of Node 2: 2
Enter Node 3: C
Enter Node 3 Heuristic : 3
Enter Number of Children of Node 3: 2
Enter Node 4 : D
Enter Node 4 Heuristic: 1
Enter Number of Children of Node 4 : 0
Enter Node 5: E
Enter Node 5 Heuristic: 4
Enter Number of Children of Node 5 : 0
Enter Node 6: F
Enter Node 6 Heuristic: 4
Enter Number of Children of Node 6 : 0
Enter Node 7: G
Enter Node 7 Heuristic : 0
Enter Number of Children of Node 7 : 0
Enter the Nodes connected to A: B
C
Enter the Nodes connected to B : D
E
Enter the Nodes connected to C: F
G
Enter the element to be searched: G

PATH: A B D C G
Goal Reached

Cost = 16

Post a Comment

Previous Post Next Post