source: proiecte/pgraph/Code/Prim/apm2.c @ 129

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