Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #define n 26
- int m[n][n], viz[n], nodes[n], cnt=0;
- void init()
- {
- int i,j, aux=97;
- for(i=1;i<=n;i++)
- {
- nodes[i]=aux;
- aux++;
- }
- for(i=1;i<=n;i++)
- for(j=1;j<=n;j++)
- m[i][j]=0;
- m[i][j]=0;
- }
- void afisare()
- {
- int i,j;
- printf("Nodurile si codul lor ASCII \n\n");
- for(i=1;i<=n;i++)
- printf("%c = %d \n", 'a'+i-1, nodes[i]);
- printf("\n\narce: \n");
- for(i=1;i<=n;i++)
- {
- for(j=1;j<=n;j++)
- printf("%6d", m[i][j]);
- printf("\n");
- }
- }
- int vocala(int x)
- {
- return(x=='a' || x=='e' || x=='i' || x=='o' || x=='u');
- }
- void arce()
- {
- int i,j;
- printf("arcele: \n");
- for(i=1;i<=n;i++)
- {
- printf("PENTRU NODUL %c: \n", 'a'+i-1);
- for(j=1;j<=n;j++)
- {
- if(vocala(nodes[i]) && !vocala(nodes[j]) || !vocala(nodes[i]) && vocala(nodes[j]))
- {
- m[i][j]=nodes[i]+nodes[j];
- m[j][i]=nodes[i]+nodes[j];
- printf(" %c <-> %c pondere: %d\n", 'a'+i-1, 'a'+j-1, m[i][j]);
- }
- }
- }
- afisare();
- }
- void prim()
- {
- int i,j,aux;
- int minim, cost=0, nrviz;
- viz[1]=1;
- nrviz=1;
- while(nrviz<=n)
- {
- minim=999;
- for(i=1;i<=n;i++)
- {
- if(viz[i])
- {
- for(j=1;j<=n;j++)
- {
- if(!viz[j] && m[i][j]!=0 && m[i][j]<minim && i!=j)
- {
- minim=m[i][j];
- aux=j;
- }
- }
- }
- }
- viz[aux]=1;
- if(minim!=999)
- cost+=minim;
- nrviz++;
- }
- printf("cost total: %d\n", cost);
- }
- int main()
- {
- int opt;
- while(1)
- {
- printf("\n\n0.exit\n");
- printf("1.initializare\n");
- printf("2.generare arce\n");
- printf("3.prim\n");
- printf("opt: ");
- scanf("%d", &opt);
- switch(opt)
- {
- case 0: exit(1);
- break;
- case 1: init();
- afisare();
- break;
- case 2: arce();
- break;
- case 3:
- prim();
- break;
- default: break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement