prim算法-2025/11/20
prim算法
#include<bits/stdc++.h>
using namespace std;
const int N = 510, INF = 0x3f3f3f3f;
int g[N][N];
int n, m;
int dist[N] , st[N];
int prim(){
memset(dist, 0x3f, sizeof dist);
int res = 0;
for(int i = 0; i < n ; i++){
int t= -1;
for(int j = 1; j <= n; j++){
if(!st[j] && (t == -1 || dist[t] > dist[j]))
t = j;
}
cout << t << " " << dist[t] << "\n";
if(i && dist[t] == INF) return INF;
if(i) res += dist[t];
st[t] = 1;
for(int j = 1; j<=n;j++){
// cout << "g[t][j]::" << g[t][j] << "\n";
dist[j] = min(dist[j], g[t][j]);
}
}
return res;
}
int main(){
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
if(i == j) g[i][j] = 0;
else g[i][j] = INF;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
cout << g[i][j] << " ";
cout << "\n";
}
cin >> n >> m;
for(int i = 1; i <= m; i++){
int a, b ,c;
cin >> a >> b >> c;
g[a][b] = g[b][a] = min(g[a][b] , c);
}
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
cout << g[i][j] << " ";
cout << "\n";
}
int t = prim();
if(t == INF) puts("impossible");
else cout << t << "\n";
return 0;
}

浙公网安备 33010602011771号