source: proiecte/pgraph/Code/Prim/apm.cpp @ 129

Last change on this file since 129 was 129, checked in by (none), 14 years ago
File size: 1.3 KB
Line 
1//Author Antonio-Gabriel Sturzu
2
3#include<stdio.h>
4#include<vector>
5#include<string.h>
6#include<time.h>
7#define pb push_back
8#define mp make_pair
9#define inf 1001
10
11using namespace std;
12
13int main()
14{
15        int n,m,a,b,c,cost=0,prev[200001],key[200001],i,min=0,imin=0;
16        vector< pair<int,int> > v[200001];
17        char viz[200001];
18        clock_t time1,time2;
19        FILE *f=fopen("apm.in","r");
20
21        fscanf(f,"%i%i",&n,&m);
22        for(i=0;i<m;i++)
23        {
24                fscanf(f,"%i%i%i",&a,&b,&c);
25                v[a].pb(mp(b,c));
26                v[b].pb(mp(a,c));
27        }
28        fclose(f);
29
30        memset(viz,0,sizeof(viz));
31        time1=clock();
32        key[1]=0;
33        for(i=2;i<=n;i++)
34                key[i]=inf;
35
36        for(;;)
37        {
38                min=inf;
39                for(i=1;i<=n;i++)
40                {
41                        if(viz[i]==0 && key[i]<min)
42                        {
43                                min=key[i];
44                                imin=i;
45                        }
46                }
47                if(min==inf)
48                        break;
49                viz[imin]=1;
50                cost+=min;
51                for(i=0;i<(int) v[imin].size();i++)
52                {
53                        if(viz[v[imin][i].first]==0 && v[imin][i].second<key[v[imin][i].first])
54                        {
55                                prev[v[imin][i].first]=imin;
56                                key[v[imin][i].first]=v[imin][i].second;
57                        }
58                } 
59        }
60        time2=clock();
61        printf("Au trecut %f secunde \n",(double)(time2-time1)/CLOCKS_PER_SEC);
62        f=fopen("apm.out","w");
63        fprintf(f,"%i\n",cost);
64        fprintf(f,"%i\n",n-1);
65        for(i=2;i<=n;i++)
66                fprintf(f,"%i %i\n",prev[i],i);
67        fclose(f);
68        return 0;
69}
Note: See TracBrowser for help on using the repository browser.