Prim算法

/* 算法核心标记点集合 将其分成两个部分 一个部分是已经访问 另一个部分是没有访问 在已经访问的点中找到与其邻接的路径最短的点 反复查找直到所有的点查找完毕 主要算法是 贪心法--邻接点 */ #include <iostream> #include <fstream> using namespace std; const int MAX = 99999; void print(int n,int m); void prim(int n,int g[100][100]); int g[100][100]; int main() { int n; ifstream in("in.txt"); while(in>>n) { for(int i = 0;i<n;i++) for(int j = 0;j<n;j++) in>>g[i][j]; prim(n,g); } return 0; } void prim(int n,int g[100][100]) { bool visited[100]; int i = 0; int j = 0; int k = 0; for(i = 0;i<n;i++) visited[i] = false; visited[0] = true; int count = n-1; while(count--) { int min = MAX; int marki = 0; int markj = 0; for(i =0 ;i<n;i++) { for(j = 0;j<n;j++) if(visited[i]&&!visited[j]&&g[i][j]!= MAX) { if(g[i][j]<min) { min = g[i][j]; marki = i; markj = j; } } } visited[markj] = true; print(marki,markj); } } void print(int n,int m) { cout<<n+1<<"-->"<<m+1<<" : "<<g[n][m]<<endl; } 

你可能感兴趣的:(Prim算法)