Advertisement
majczel23000

Alg Prima

Jan 18th, 2018
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.17 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. const int N = 5;
  5.  
  6. int graf[N][N]=
  7. {
  8.     { 0, 2, 4,-1, 6},
  9.     { 2, 0, 1, 3,-1},
  10.     { 4, 1, 0, 1, 2},
  11.     {-1, 3, 1, 0, 1},
  12.     { 6,-1, 2, 1, 0}
  13. };
  14.  
  15. int poprzednik[N];
  16. int key[N];
  17. bool odwiedzony[N];
  18. int Q=N;
  19.  
  20. int mini()
  21. {
  22.     int mini;
  23.     int minik=32728;
  24.     for(int i=0; i < N ; i++)
  25.     {
  26.         if(!odwiedzony[i]&&minik>key[i])
  27.         {
  28.             minik = key[i];
  29.             mini=i;
  30.         }
  31.     }
  32.     odwiedzony[mini]=1;
  33.     return mini;
  34. }
  35. void prim(int s)
  36. {
  37.     for(int i =0 ; i < N ; i++)
  38.         key[i]=32728;
  39.     poprzednik[s]=-2;
  40.     key[s]=0;
  41.     while(Q>0)
  42.     {
  43.         --Q;
  44.         int u = mini();
  45.         for(int i = 0; i<N; i++)
  46.         {
  47.             if(graf[u][i]>0)
  48.             {
  49.                 if(odwiedzony[i]==0&&key[i]>graf[u][i])
  50.                 {
  51.                     poprzednik[i]=u;
  52.                     key[i]=graf[u][i];
  53.                 }
  54.             }
  55.         }
  56.     }
  57. }
  58. int main()
  59. {
  60.     int s;
  61.     cin>>s;
  62.     --s;
  63.     prim(s);
  64.     for(int i=0; i<N; i++)
  65.         cout<<"i: " <<i+1<<" poprzednik: "<<poprzednik[i]+1<<" key: "<<key[i]<<endl;
  66.     return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement