Advertisement
Eternoseeker

Prims

Dec 21st, 2022
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.99 KB | Source Code | 0 0
  1. #include<iostream>
  2. #define infinity 9999
  3. using namespace std;
  4.  
  5. class spt{
  6.     int vertex;
  7.     int edges;
  8.     int adj[100][100];
  9.     int sp[100][100];
  10.     int mincost;
  11. public:
  12.     spt(int v){
  13.         vertex = v;
  14.         mincost = 0;
  15.         edges = 0;
  16.         for(int i = 0; i < v; i++)
  17.         for(int j = 0; j < v; j++){
  18.         adj[i][j] = 0;
  19.         sp[i][j] = 0;
  20.         }
  21.     }
  22.  
  23.     int getmincost(){
  24.         return this -> mincost;
  25.     }
  26.  
  27.     void creategraph(){
  28.         int src, dest, weight;
  29.         char choice = 'y';
  30.         cout << "Enter the details of edges source, destination and weight" << endl;
  31.         do{
  32.             cout << "Enter edge - source, destination, weight" << endl;
  33.             cin >> src >> dest >> weight;
  34.             adj[src][dest] = weight;
  35.             adj[dest][src] = weight;
  36.             cout << "Do you want to enter another edge? (Y-yes and N-No)" << endl;
  37.             cin >> choice;
  38.         }while(choice == 'y' || choice == 'Y');
  39.     }
  40.  
  41.     void printGraph(){
  42.         for(int i = 0; i < vertex; i++){
  43.             for(int j = 0; j < vertex; j++){
  44.                 cout << " " << adj[i][j];
  45.             }
  46.             cout << endl;
  47.         }
  48.     }
  49.  
  50.     void printSpanningTree(){
  51.         for(int i = 0; i < vertex; i++){
  52.             for(int j = 0;j < vertex; j++){
  53.                 cout << " " << sp[i][j];
  54.             }
  55.             cout << endl;
  56.         }
  57.     }
  58.  
  59.     void mst(){
  60.         int cost[vertex][vertex]={0};
  61.         int visited[10]={0};
  62.         int distance[vertex] = {infinity};
  63.         int source[vertex] = {0};
  64.         int minDist=0;
  65.         for(int i=0;i<vertex;i++)
  66.             for(int j=0;j<vertex;j++)
  67.                 if(adj[i][j]==0)
  68.                     cost[i][j] = infinity;
  69.                 else
  70.                     cost[i][j] = adj[i][j];
  71.  
  72.         distance[0]=0;
  73.         visited[0] = 1;
  74.         int source_vertex, dest_vertex=0;
  75.         for(int i=0;i<vertex;i++){
  76.             distance[i] = cost[0][i];
  77.             source[i] = 0;
  78.         }
  79.         mincost=0;
  80.         edges=vertex-1;
  81.         while(edges>0){
  82.             minDist = infinity;
  83.             for(int i=0;i<vertex;i++)
  84.             {
  85.                 if(visited[i]==0 && distance[i]< minDist)
  86.                 {
  87.                     minDist= distance[i];
  88.                     dest_vertex= i;
  89.                 }
  90.             }
  91.  
  92.             source_vertex=source[dest_vertex];
  93.             sp[source_vertex][dest_vertex] = sp[dest_vertex][source_vertex] = distance[dest_vertex];
  94.             cout<<"Added ("<<source_vertex<<","<<dest_vertex<<")"<<endl;
  95.             visited[dest_vertex] = 1;
  96.             mincost+=cost[source_vertex][dest_vertex];
  97.             edges--;
  98.  
  99.             for(int i=0;i<vertex; i++)
  100.             {
  101.                 if(visited[i]==0 && cost[dest_vertex][i]< distance[i])
  102.                 {
  103.                     distance[i]= cost[dest_vertex][i];
  104.                     source[i]=dest_vertex;
  105.                 }
  106.             }
  107.         }
  108.     }
  109. };
  110.  
  111. int main(){
  112.     spt spObj(7);
  113.     spObj.creategraph();
  114.     spObj.printGraph();
  115.     spObj.mst();
  116.     cout<<"Done"<<endl;
  117.     spObj.printSpanningTree();
  118.     cout<<"The cost of minimum spanning tree is: "<<spObj.getmincost();
  119.     return 0;
  120. }
  121.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement