Advertisement
leonard007

Untitled

Jan 19th, 2023
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.40 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define n 26
  4. int m[n][n], viz[n], nodes[n], cnt=0;
  5.  
  6. void init()
  7. {
  8.     int i,j, aux=97;
  9.     for(i=1;i<=n;i++)
  10.     {
  11.         nodes[i]=aux;
  12.         aux++;
  13.     }
  14.     for(i=1;i<=n;i++)
  15.         for(j=1;j<=n;j++)
  16.             m[i][j]=0;
  17.             m[i][j]=0;
  18. }
  19.  
  20. void afisare()
  21. {
  22.     int i,j;
  23.     printf("Nodurile si codul lor ASCII \n\n");
  24.     for(i=1;i<=n;i++)
  25.         printf("%c = %d \n", 'a'+i-1, nodes[i]);
  26.  
  27.     printf("\n\narce: \n");
  28.     for(i=1;i<=n;i++)
  29.     {
  30.         for(j=1;j<=n;j++)
  31.             printf("%6d", m[i][j]);
  32.         printf("\n");
  33.     }
  34. }
  35.  
  36. int vocala(int x)
  37. {
  38.     return(x=='a' || x=='e' || x=='i' || x=='o' || x=='u');
  39. }
  40.  
  41. void arce()
  42. {
  43.     int i,j;
  44.     printf("arcele: \n");
  45.     for(i=1;i<=n;i++)
  46.     {
  47.         printf("PENTRU NODUL %c: \n", 'a'+i-1);
  48.         for(j=1;j<=n;j++)
  49.         {
  50.             if(vocala(nodes[i]) && !vocala(nodes[j]) || !vocala(nodes[i]) && vocala(nodes[j]))
  51.             {
  52.                 m[i][j]=nodes[i]+nodes[j];
  53.                 m[j][i]=nodes[i]+nodes[j];
  54.                 printf(" %c <-> %c      pondere: %d\n", 'a'+i-1, 'a'+j-1, m[i][j]);
  55.             }
  56.         }
  57.     }
  58.     afisare();
  59. }
  60.  
  61. void prim()
  62. {
  63.     int i,j,aux;
  64.     int minim, cost=0, nrviz;
  65.     viz[1]=1;
  66.     nrviz=1;
  67.     while(nrviz<=n)
  68.     {
  69.         minim=999;
  70.         for(i=1;i<=n;i++)
  71.         {
  72.             if(viz[i])
  73.             {
  74.                 for(j=1;j<=n;j++)
  75.                 {
  76.                     if(!viz[j] && m[i][j]!=0 && m[i][j]<minim && i!=j)
  77.                     {
  78.                         minim=m[i][j];
  79.                         aux=j;
  80.                     }
  81.                 }
  82.             }
  83.         }
  84.         viz[aux]=1;
  85.         if(minim!=999)
  86.             cost+=minim;
  87.         nrviz++;
  88.     }
  89.     printf("cost total: %d\n", cost);
  90. }
  91.  
  92. int main()
  93. {
  94.     int opt;
  95.     while(1)
  96.     {
  97.         printf("\n\n0.exit\n");
  98.         printf("1.initializare\n");
  99.         printf("2.generare arce\n");
  100.         printf("3.prim\n");
  101.         printf("opt: ");
  102.         scanf("%d", &opt);
  103.         switch(opt)
  104.         {
  105.             case 0: exit(1);
  106.                 break;
  107.             case 1: init();
  108.                 afisare();
  109.                 break;
  110.             case 2: arce();
  111.                 break;
  112.             case 3:
  113.                 prim();
  114.                 break;
  115.             default: break;
  116.         }
  117.     }
  118. }
  119.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement