VasilM

Минимално Покриващо Дърво МПД(Prim)

May 14th, 2014
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.03 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. const int INF=2000000000, SIZE=100;
  5. int Graph[SIZE][SIZE],Parent[SIZE],Used[SIZE],d[SIZE];
  6. int N,M,r,x,y,w;
  7.  
  8. void prim(int r){    
  9.  int i,j,k,minc,minv;
  10.  Parent[r]=0;
  11.  Used[r]=1;
  12.  
  13.  for(i=1;i<=N;i++)d[i]=r;
  14.  
  15.  for(i=1;i<N;i++){
  16.   minc=INF; minv=0;
  17.  
  18.   for(j=1;j<=N;j++)
  19.  
  20.    if(!Used[j] && Graph[j][d[j]]<minc)
  21.    {
  22.      minc=Graph[j][d[j]];
  23.      minv=j;
  24.      Parent[minv]=d[minv];
  25.      Used[minv]=1;
  26.      
  27.      for(j=1;j<=N;j++)
  28.       if(!Used[j] && Graph[j][d[j]]>Graph[j][minv])
  29.          d[j]=minv;
  30.    }
  31.  }
  32. }
  33.  
  34. int main(){
  35.      
  36.  cin>>N>>M>>r;
  37.          
  38.  for(int i=1;i<=N;i++){
  39.   for(int j=1;j<=N;j++) Graph[i][j]=INF;
  40.   Graph[i][i]=0;
  41.  }
  42.  
  43.  for(int i=1;i<=M;i++){
  44.    cin>>x>>y>>w;
  45.    Graph[x][y] = Graph[y][x] = w;
  46.  }
  47.  
  48.  prim(r);
  49.  for(int i=1;i<=N;i++) cout << i << ": " << Parent[i] << endl;
  50.  
  51.  return EXIT_SUCCESS;
  52. }
  53.  
  54. /* INPUT
  55. 10 14 1
  56. 1 2 3
  57. 1 6 5
  58. 1 3 8
  59. 2 4 10
  60. 2 5 2
  61. 3 5 2
  62. 3 7 5
  63. 4 8 11
  64. 4 9 3
  65. 5 9 1
  66. 5 10 1
  67. 6 10 4
  68. 7 10 3
  69. 9 10 1
  70. */
Advertisement
Add Comment
Please, Sign In to add comment