Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- const int INF=2000000000, SIZE=100;
- int Graph[SIZE][SIZE],Parent[SIZE],Used[SIZE],d[SIZE];
- int N,M,r,x,y,w;
- void prim(int r){
- int i,j,k,minc,minv;
- Parent[r]=0;
- Used[r]=1;
- for(i=1;i<=N;i++)d[i]=r;
- for(i=1;i<N;i++){
- minc=INF; minv=0;
- for(j=1;j<=N;j++)
- if(!Used[j] && Graph[j][d[j]]<minc)
- {
- minc=Graph[j][d[j]];
- minv=j;
- Parent[minv]=d[minv];
- Used[minv]=1;
- for(j=1;j<=N;j++)
- if(!Used[j] && Graph[j][d[j]]>Graph[j][minv])
- d[j]=minv;
- }
- }
- }
- int main(){
- cin>>N>>M>>r;
- for(int i=1;i<=N;i++){
- for(int j=1;j<=N;j++) Graph[i][j]=INF;
- Graph[i][i]=0;
- }
- for(int i=1;i<=M;i++){
- cin>>x>>y>>w;
- Graph[x][y] = Graph[y][x] = w;
- }
- prim(r);
- for(int i=1;i<=N;i++) cout << i << ": " << Parent[i] << endl;
- return EXIT_SUCCESS;
- }
- /* INPUT
- 10 14 1
- 1 2 3
- 1 6 5
- 1 3 8
- 2 4 10
- 2 5 2
- 3 5 2
- 3 7 5
- 4 8 11
- 4 9 3
- 5 9 1
- 5 10 1
- 6 10 4
- 7 10 3
- 9 10 1
- */
Advertisement
Add Comment
Please, Sign In to add comment