Advertisement
a53

Flori2

a53
Dec 29th, 2019
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. using namespace std;
  4. FILE *f=fopen("flori2.in","r");
  5. FILE *g=fopen("flori2.out","w");
  6. int n,k,a[150][150];
  7.  
  8. int irelj(int i,int j) //verifica daca fata i e in relatie cu j(au cel putin o floare in comun)
  9. {int u,v;
  10. for(u=1;u<=a[i][0];u++) //a[i][0] e numarul de elemente pe linia i
  11. for(v=1;v<=a[j][0];v++)
  12. if (a[i][u]==a[j][v])
  13. return 1;
  14. return 0;
  15. }
  16. int apartine(int val,int linie) //caut val in multimea de pe linia linie
  17. {int j,lg=a[linie][0];
  18. for(j=1;j<=lg;j++)
  19. if (val==a[linie][j])
  20. return 1;
  21. return 0;
  22. }
  23.  
  24. void reuneste(int i,int j) //reuneste in linia i linia j
  25. {int u;
  26. for(u=1;u<=a[j][0];u++)
  27. if(!apartine(a[j][u],i))
  28. {a[i][0]++;
  29. a[i][ a[i][0] ]=a[j][u];
  30. }
  31. }
  32.  
  33. int main()
  34. {int viz[150],i,j,val,ok;
  35. fscanf(f,"%d %d",&n,&k);
  36. for(i=1;i<=n;i++)
  37. for(j=1;j<=k;j++)
  38. {fscanf(f,"%d",&val);
  39. if(!apartine(val,i))
  40. {a[i][0]++; //pe prima coloana am nr. de tipuri distincte de flori
  41. a[i][ a[i][0] ]=val; //in multimea de pe linia i am tipurile distincte de flori al fetitei i
  42. }
  43. }
  44. for(i=1;i<=n;i++)
  45. viz[i]=i; //initial exista n grupe
  46. for(i=1;i<=n;i++)
  47. {ok=0;
  48. if(a[i][0])
  49. {
  50. for(j=i+1;j<=n;j++)
  51. if(irelj(i,j))
  52. {
  53. viz[j]=viz[i]; //j trebuie sa ajunga in grupa cu i
  54. reuneste(i,j); //reunesc in linia i linia j
  55. a[j][0]=0;//consider ca in multimea j am 0 elemente acuma
  56. ok=1;
  57. }
  58. }
  59. if (ok) i--;//faptul ca am reunit in i cel putin o multime j implica sa continui cu aceeasi linie i
  60. //daca as lasa i sa se incrementeze conform for-ului,ar gresi in sensul ca
  61. //pt. i rel j si i nu e in rel cu k si j rel k
  62. //ar pune j in grupa i dar k ar ajunge in alta grupa
  63. }
  64. for(i=1;i<=n;i++)
  65. if(viz[i])
  66. {fprintf(g,"%d ",i);
  67. for(j=i+1;j<=n;j++)
  68. if(viz[i]==viz[j])
  69. {fprintf(g,"%d ",j);
  70. viz[j]=0; //ca sa nu mai fie prelucrat
  71. }
  72. fprintf(g,"\n");
  73. }
  74. fclose(g);
  75. return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement