Untitled
unknown
plain_text
2 years ago
1.2 kB
5
Indexable
#include<iostream> using namespace std; int n; int a[105][105]; int prims(){ int u,v,min_distance,distance[105],from[105]; int visited[105],no_of_edges,i,min_cost,j; //Khoi tao visited[],distance[] and from[] distance[0]=0; visited[0]=1; for(i=1;i<n;i++) { distance[i]=a[0][i]; from[i]=0; visited[i]=0; } min_cost=0; //Giá tri cua cây khung no_of_edges=n-1; //So canh duoc thêm vào. while(no_of_edges>0) { //Tìm dinh có khoang cách nho nhat den cây min_distance=1000000; for(i=1;i<n;i++){ if(visited[i]==0&&distance[i]<min_distance) { v=i; min_distance=distance[i]; } } u=from[v]; no_of_edges--; visited[v]=1; for(i=1;i<n;i++){ // tim cac dinh ke cac dinh da co if(visited[i]==0&&a[i][v]<distance[i]) { distance[i]=a[i][v]; from[i]=v; } } min_cost=min_cost+a[u][v]; } return(min_cost); } int main(){ int test; cin >> test; for(int tc=1; tc <= test; tc++){ cin >> n; for(int i=0; i< n; i++){ for(int j=0; j<n; j++){ cin >> a[i][j]; } } int total = prims(); cout << "Case #" << tc << endl; cout << total << endl; } return 0; }
Editor is loading...