Thursday, 22 December 2022

CN

 

 // Hamming code
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int m_size, rbit = 0, msg[50], data[60], i, k, j, count = 0;
    cout << "\nEnter message size: ";
    cin >> m_size;

    // calculate value of r  2^r >= m_size +rbit +1
    while (1)
    {
        if ((m_size + rbit + 1) <= (int)pow(2, rbit))
            break;

        rbit++;
    }
    cout << "Enter message: ";
    for (i = m_size; i >= 1; i--)
    {
        cin >> msg[i];
    }
    k = 0; // for 2^k
    j = 1; // position of r bit
    for (i = 1; i <= (m_size + rbit); i++)
    {
        if (i == (int)pow(2, k))
        {
            data[i] = 8;
            k++;
        }
        else
        {
            data[i] = msg[j];
            j++;
        }
    }
    for (i = 1; i <= (m_size + rbit); i++)
    {
        if (data[i] == 8)
        {
            data[i] = 0;
            int count = 0;
            for (j = i; j <= (m_size + rbit); j++)
            {
                for (k = 0; k < i; k++)
                {
                    if (data[j] == 1)
                    {
                        count++;
                    }
                    j++;
                }
                j = j + i - 1;
            }

            if (count % 2 == 0)
                data[i] = 1;
            else
                data[i] = 0;
        }
    }
    cout << "\nSender side code: ";
    for (i = (m_size + rbit); i >= 1; i--)
        cout << data[i] << " ";
    cout << "\n\n-------------------------------------------------------\n"
         << endl;

    cout << "Enter receiver side code: ";
    for (i = (m_size + rbit); i >= 1; i--)
        cin >> data[i];

    int c = 0;

    int parities[m_size] = {0};
    for (i = 1; i <= (m_size + rbit); i++)
    {
        if (i == (int)pow(2, c))
        {
            count = 0;
            for (j = i; j <= (m_size + rbit); j++)
            {
                for (k = 0; k < i; k++)
                {
                    if (data[j] == 1)
                    {
                        count++;
                    }
                    j++;
                }
                j = j + i - 1;
            }
            if (data[i] == 1)
                count--;
            if (count % 2 == data[i])
                parities[c] = 1;
            else if (count % 2 != data[i])
                parities[c] = 0;
            c++;
        }
    }
    c = 0;
    for (int i = 0; i < rbit; i++)
    {
        c += parities[i] * ((int)pow(2, i));
    }
    if (c == 0)
    {
        cout << "NO ERROR FOUND !!!" << endl;
        exit(0);
    }
    cout << "\nError at position: " << c << endl;
    data[c] = data[c] == 0 ? 1 : 0;
    cout << "After error correction: ";
    for (i = (m_size + rbit); i >= 1; i--)
    {
        cout << data[i] << " ";
    }
    cout << endl;

    return 0;
}

 

//dijkstras

#include <limits.h>
#include <stdbool.h>
#include <stdio.h>

#define V 9


int minDistance(int dist[], bool sptSet[])
{
    int min = INT_MAX, min_index;

    for (int v = 0; v < V; v++)
        if (sptSet[v] == false && dist[v] <= min)
            min = dist[v], min_index = v;

    return min_index;
}


void printSolution(int dist[])
{
    printf("0 is the source node\n");
    printf("Enter the vertex (0-8) till which you have to find the minimum distance from the source: ");
    int v;
    scanf("%d", &v);
    for (int i = 0; i < V; i++)
    {
        if (v == i)
        {
            printf("Distance from source to entered vertex is: %d\n\n", dist[i]);
        }
    }
}

void dijkstra(int graph[V][V], int src)
{
    int dist[V];

    bool sptSet[V];

    for (int i = 0; i < V; i++)
        dist[i] = INT_MAX, sptSet[i] = false;

    dist[src] = 0;

    for (int count = 0; count < V - 1; count++)
    {
        int u = minDistance(dist, sptSet);

        sptSet[u] = true;

        for (int v = 0; v < V; v++)

            if (!sptSet[v] && graph[u][v] && dist[u] != INT_MAX && dist[u] + graph[u][v] < dist[v])
                dist[v] = dist[u] + graph[u][v];
    }

    printSolution(dist);
}

int main()
{
    int graph[V][V] = {{0, 4, 0, 0, 0, 0, 0, 8, 0},
                       {4, 0, 8, 0, 0, 0, 0, 11, 0},
                       {0, 8, 0, 7, 0, 4, 0, 0, 2},
                       {0, 0, 7, 0, 9, 14, 0, 0, 0},
                       {0, 0, 0, 9, 0, 10, 0, 0, 0},
                       {0, 0, 4, 14, 10, 0, 2, 0, 0},
                       {0, 0, 0, 0, 0, 2, 0, 1, 6},
                       {8, 11, 0, 0, 0, 0, 1, 0, 7},
                       {0, 0, 2, 0, 0, 0, 6, 7, 0}};

    dijkstra(graph, 0);

    return 0;
}

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home