Friday, 5 May 2017

A* search implementation in c++





CODE :
#include<bits/stdc++.h>
#define mx 1000
using namespace std;
map <string,int>mymap;
map<int,string>mymap1;
int N,E,mat[mx][mx],start,end1,par[mx],cost[mx];


struct node
{
    int node_no ;

    int huristic_value;

    bool operator<(const node& target) const
    {
        return huristic_value > target.huristic_value;
    }
};
node arr[mx];



void  Printpath(int V)
{
    if(start==V)
    {
        string s = mymap1[start];
        cout << s;
        return;
    }
    else if(par[V]==0)
    {
        printf("No path exist\n");
    }
    else
    {
        Printpath(par[V]);
        string s = mymap1[V];
        cout <<"-->" << s ;
    }
}

int GBFS(int ux)
{
    node current;
    priority_queue<node>q;
    q.push(arr[ux]);
    par[ux]=0;
    cost[ux] = 0;

    while(!q.empty())
    {
        current = q.top();
        int vx = current.node_no;
        q.pop();
        if(vx == end1)
            return vx;
        for(int i=1; i<=N; i++)
        {


            if(mat[vx][i]!=-1)
            {
                cost[i]= cost[vx] + mat[vx][i];
                arr[i].huristic_value+=cost[i];
                q.push(arr[i]);
                if(par[vx]!=i)
                    par[i] = vx;

            }
        }
    }
}
int main()
{
    string s;
    int hv;
    cout <<"Enter the number of Node : ";
    cin >> N;

    cout << "N H" << endl;///N for node ;H for huristic value
    for(int i=1; i<=N; i++)
    {
        cin >> s >> hv;
        mymap[s] = i;
        mymap1[i] = s;
        arr[i].node_no = i;
        arr[i].huristic_value = hv;
    }

    cout <<"Enter the number of Edge : " ;
    cin >> E ;


    string source, des;
    int g_n;


    for(int i=1; i<=N; i++)
    {
        for(int j=1; j<=N; j++)
        {
            mat[i][j] = -1;                   ///Matrix initialization
        }
    }


    for(int i = 1; i <= E; i++)
    {
        cin >> source >> des >> g_n;
        int x = mymap[source];               ///Input the edges :)
        int y = mymap[des];
        mat[x][y] = g_n;
        mat[y][x] = g_n;
    }


    for(int i=1; i<=N; i++)
    {
        par[i]=0;
    }

    cout << "enter the start and goal node" <<endl;
    cin >> source >> des;
    start = mymap[source];
    end1 = mymap[des];
    int path =   GBFS(start);
    Printpath(end1);
    cout << endl << "Path cost : "<<cost[path] << endl;

}

INPUT : 
8
A 336
T 329
S 253
R 193
F 176
C 160
P 100
B 0
9
A T 118
A S 140
S R 80
S F 99
R C 146
R P 97
F B 211
C P 138
P B 101
A B

OUTPUT :
A-->S-->R-->P-->B
Path cost : 418

Greedy Best First Search(GBST) c++



CODE :

#include<bits/stdc++.h>
#define mx 1000
using namespace std;
map <string,int>mymap;
map<int,string>mymap1;
int N,E,mat[mx][mx],start,end1,par[mx],cost[mx];

struct node
{
    int node_no ;
    int huristic_value;

    bool operator<(const node& target) const
    {
        return huristic_value > target.huristic_value;
    }
};
node arr[mx];

void  Printpath(int V)
{
    if(start==V)
    {
        string s = mymap1[start];
        cout << s;
        return;
    }
    else if(par[V]==0)
    {
        printf("No path exist\n");
    }
    else
    {
        Printpath(par[V]);
        string s = mymap1[V];
        cout <<"-->" << s ;
    }
}

int GBFS(int ux)
{
    node current;
    priority_queue<node>q;
    q.push(arr[ux]);
    par[ux]=0;
    cost[ux] = 0;

    while(!q.empty())
    {
        current = q.top();
        int vx = current.node_no;
        q.pop();
        for(int i=1; i<=N; i++)
        {
            if(mat[vx][i]!=-1)
            {
                cost[i]= cost[vx] + mat[vx][i];
                q.push(arr[i]);
                if(par[vx]!=i)
                    par[i]=vx;
                if(i == end1)
                {
                    return cost[i];
                }
            }
        }
    }
}
int main()
{
    string s;
    int hv;
    cout <<"Enter the number of Node : ";
    cin >> N;

    cout << "N H" << endl;///N for node ;H for huristic value
    for(int i=1; i<=N; i++)
    {
        cin >> s >> hv;
        mymap[s] = i;
        mymap1[i] = s;
        arr[i].node_no = i;
        arr[i].huristic_value = hv;
    }

    cout <<"Enter the number of Edge : " ;
    cin >> E ;

    string source, des;
    int g_n;

    for(int i=1; i<=N; i++)
    {
        for(int j=1; j<=N; j++)
        {
            mat[i][j] = -1;                   ///Matrix initialization
        }
    }

    for(int i = 1; i <= E; i++)
    {
        cin >> source >> des >> g_n;
        int x = mymap[source];               ///Input the edges :)
        int y = mymap[des];
        mat[x][y] = g_n;
        mat[y][x] = g_n;
    }


    for(int i=1; i<=N; i++)
    {
        par[i]=0;
    }

    cout << "enter the start and goal node" <<endl;
    cin >> source >> des;
    start = mymap[source];
    end1 = mymap[des];

    int path=   GBFS(start);
    Printpath(end1);
    cout << endl << "Path cost : "<<path << endl;

}


INPUT : 
8
A 336
T 329
S 253
R 193
F 176
C 160
P 100
B 0
9
A T 118
A S 140
S R 80
S F 99
R C 146
R P 97
F B 211
C P 138
P B 101
A B

OUTPUT :
A-->S-->F-->B
Path cost : 450

Wednesday, 3 May 2017

DFS(Depth-first search) to generate All possible Path in c++



CODE :

#include<bits/stdc++.h>
#define MAX 1000
using namespace std;
map<string,int >mymap;
map<int ,string>mymap1;
int node, edge,color[MAX],par[MAX],mat[MAX][MAX],start,end1;
void  Printpath(int V)
{
    if(start==V)
    {
        string s = mymap1[start];
        cout << s;
    }
    else if(par[V]==0)
    {
        printf("No path exist\n");
    }
    else
    {
        Printpath(par[V]);
        string s = mymap1[V];
        cout <<"-->" << s ;
    }
}

void dfs(int ux)
{
    color[ux]=1;
    if(ux==end1)
    {
        Printpath(ux);
        cout << endl;
        return;
    }
   for(int i=1; i<=node; i++)
    {
        if(mat[ux][i]==1)
        {
            if(color[i]==0)
            {
                par[i]=ux;
                dfs(i);
                color[i]=0;
            }
        }
    }
}
int main()
{
    int n=1;
    string source,des,s,e;
    cin >> node >> edge;
    getchar();
    for(int i=0; i<edge; i++)
    {
        cin >>source >>des;
        if(mymap.find(source)==mymap.end())
        {
            mymap[source]=n;
            mymap1[n]=source;
            n=n+1;
        }
        if(mymap.find(des)==mymap.end())
        {
            mymap[des]=n;
            mymap1[n]=des;
            n=n+1;
        }

        int  x =mymap[source];
        int  y =mymap[des];
        mat[x][y]=1;
        mat[y][x]=1;
    }
cout<<"Enter a Start and End" << endl;
    cin >> s >> e;
    start = mymap[s];
    end1 = mymap[e];


    for(int i=1; i<=node; i++)
    {
        color[i]=0;
        par[i]=0;
    }

  cout <<"ALL POSSIBLE PATH : " << endl;
    dfs(start);


}


INPUT : 
7 11
SYLHET DHAKA
SYLHET CHITTAGONG
CHITTAGONG BARISAL
CHITTAGONG DHAKA
DHAKA RAJSHAHI
DHAKA KHULNA
KHULNA RAJSHAHI
DHAKA RANGPUR
RAJSHAHI RANGPUR
KHULNA BARISAL
DHAKA BARISAL
SYLHET RANGPUR

OUTPUT : 

ALL POSSIBLE PATH :
SYLHET-->DHAKA-->CHITTAGONG-->BARISAL-->KHULNA-->RAJSHAHI-->RANGPUR
SYLHET-->DHAKA-->BARISAL-->KHULNA-->RAJSHAHI-->RANGPUR
SYLHET-->DHAKA-->RAJSHAHI-->RANGPUR
SYLHET-->DHAKA-->KHULNA-->RAJSHAHI-->RANGPUR
SYLHET-->DHAKA-->RANGPUR
SYLHET-->CHITTAGONG-->DHAKA-->BARISAL-->KHULNA-->RAJSHAHI-->RANGPUR
SYLHET-->CHITTAGONG-->DHAKA-->RAJSHAHI-->RANGPUR
SYLHET-->CHITTAGONG-->DHAKA-->KHULNA-->RAJSHAHI-->RANGPUR
SYLHET-->CHITTAGONG-->DHAKA-->RANGPUR
SYLHET-->CHITTAGONG-->BARISAL-->DHAKA-->RAJSHAHI-->RANGPUR
SYLHET-->CHITTAGONG-->BARISAL-->DHAKA-->KHULNA-->RAJSHAHI-->RANGPUR
SYLHET-->CHITTAGONG-->BARISAL-->DHAKA-->RANGPUR
SYLHET-->CHITTAGONG-->BARISAL-->KHULNA-->DHAKA-->RAJSHAHI-->RANGPUR
SYLHET-->CHITTAGONG-->BARISAL-->KHULNA-->DHAKA-->RANGPUR
SYLHET-->CHITTAGONG-->BARISAL-->KHULNA-->RAJSHAHI-->DHAKA-->RANGPUR
SYLHET-->CHITTAGONG-->BARISAL-->KHULNA-->RAJSHAHI-->RANGPUR

Tuesday, 2 May 2017

BFS(Breadth-first search) CPP

CODE :

#include<bits/stdc++.h>
#define MAX 1000
using namespace std;
map<string,int >mymap;
map<int ,string>mymap1;
int node, edge,color[MAX],par[MAX],mat[MAX][MAX],start,end1;
void  Printpath(int V)
{
    if(start==V)
    {
        string s = mymap1[start];
        cout << s;
    }
    else if(par[V]==0)
    {
        printf("No path exist\n");
    }
    else
    {
        Printpath(par[V]);
        string s = mymap1[V];
        cout <<"-->" << s ;
    }
}
void bfs(int ux)
{
    int vx,i;
    color[ux]=1;
    par[ux]=0;
    queue<int>Q;
    Q.push(ux);
    while(!Q.empty())
    {
        vx=Q.front();
        Q.pop();
        for(i=1; i<=node; i++)
        {
            if(mat[vx][i]==1 && color[i]==0)
            {
                color[i]=1;
                Q.push(i);
                par[i]=vx;
            }
        }
    }
}
int main()
{
    int n=1;
    string source,des,s,e;
    cin >> node >> edge;
    getchar();
    for(int i=0; i<edge; i++)
    {
        cin >>source >>des;
        if(mymap.find(source)==mymap.end())
        {
            mymap[source]=n;
            mymap1[n]=source;
            n=n+1;
        }
        if(mymap.find(des)==mymap.end())
        {
            mymap[des]=n;
            mymap1[n]=des;
            n=n+1;
        }

        int  x =mymap[source];
        int  y =mymap[des];
        mat[x][y]=1;
        mat[y][x]=1;
    }
cout<<"Enter a Start and End" << endl;
    cin >> s >> e;
    start = mymap[s];
    end1 = mymap[e];


    for(int i=1; i<=node; i++)
    {
        color[i]=0;
        par[i]=0;
    }


    bfs(start);
    cout << "PATH" << endl;
    Printpath(end1);
    cout << endl;
}


INPUT:
7 11
SYLHET DHAKA
SYLHET CHITTAGONG
CHITTAGONG BARISAL
CHITTAGONG DHAKA
DHAKA RAJSHAHI
DHAKA KHULNA
KHULNA RAJSHAHI
DHAKA RANGPUR
RAJSHAHI RANGPUR
KHULNA BARISAL
DHAKA BARISAL
SYLHET RANGPUR

OUTPUT: 
PATH
SYLHET-->DHAKA-->RANGPUR



ট্রিগার এর মাধ্যমে ডাটা ইনসার্ট - insert data using Database Trigger (Mysql)

সর্বপ্রথম আমরা প্রবলেমটা বুঝিঃ আমি একটা টেবিলের একটা কলামের ভ্যালুর উপর ডিপেন্ড করে আরেকটা কলামে ডাটা insert করব । এই কাজটা ট্রি...