Algorithms/Graph/Graph Algorithms/Minimum Spanning Tree/Prim's Algorithm

Last-modified: 2008-05-23 (金) 11:10:09

Prim's Algorithm

プリムのアルゴリズム, プリム法

Program

#define

typedef struct {
  double x;
  double y;
  bool used;
} Prim;

int n, usedp;
Prim data[MAX];
double result;

void prim() {
  double small, len;
  int small_index;
  data[0].used = true;
  result = 0.0;

  for(int usedp = 1 ; usedp < n ; usedp++) {
    small = -1.0;

    for(int i = 0 ; i < n ; i++) {
      if(data[i].used) {
        for(int j = 0 ; j < n ; j++) {
          if(!data[j].used) {
            len = sqrt(pow(data[i].x - data[j].x, 2.0) +
                    pow(data[i].y - data[j].y, 2.0));

            if(small == -1.0 || len < small) {
              small = len;
              small_index = j;
            }
          }
        }
      }
    }

    result += small;
    data[small_index].used = true;
  }
}