Advertisement
a53

scrabble_IN_LUCRU

a53
Nov 22nd, 2017
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. ifstream fin("scrabble.in");
  5. ofstream fout("scrabble.out");
  6. int n,x[20],folosit[20];
  7. char cuv[20][3],voc[]="AEIOU",cons[]="BCDFGHJKLMNPQRSTVWXYZ";
  8. char s[20],smax[20];
  9.  
  10. int OK(int k)
  11. {
  12. if(k>1)
  13. {
  14. if(strchr(voc,cuv[x[k]][0]) && strchr(voc,cuv[x[k-1]][1]))
  15. return 0;
  16. if(strchr(cons,cuv[x[k]][0]) && strchr(cons,cuv[x[k-1]][1]))
  17. return 0;
  18. if(cuv[x[k]][0]==cuv[x[k-1]][1])
  19. return 0;
  20. }
  21. for(int i=1;i<k;++i)
  22. {
  23. if(strcmp(cuv[x[k]],cuv[x[i]])==0)
  24. return 0;
  25. }
  26. return 1;
  27. }
  28.  
  29. int sf;
  30. void Backr(int k)
  31. {
  32. strcpy(s,cuv[x[k]]);
  33. sf=1;
  34. if(k>n)
  35. {
  36. if(sf>=1)
  37. if(strcmp(s,smax)>=0)
  38. strcpy(smax,s);
  39. s[0]='\0';
  40. }
  41. else
  42. for(int i=1;i<=n;++i)
  43. {
  44. x[k]=i;
  45. if(!folosit[x[k]]) /// Daca elementul curent nu e deja folosit
  46. {
  47. folosit[x[k]]=1; /// Marcheaza-l ca folosit
  48. if(OK(k)) /// Daca elementul poate fi adaugat
  49. strcat(s,cuv[x[k]]),++sf,s[2*sf]='\0',fout<<s<<endl;
  50. Backr(k+1);
  51. /// Genereaza restul permutarii
  52. folosit[x[k]]=0; /// Demarcheaza elementul
  53. s[2*(k-1)]='\0';
  54. --sf;
  55. }
  56. }
  57. }
  58.  
  59. void back(int k)
  60. {
  61. for(int i=1; i<=n; ++i)
  62. {
  63. x[k]=i;
  64. if(OK(k))
  65. {
  66. if(k>=2 && k<=10)
  67. {
  68. strcpy(s,cuv[x[1]]);
  69. for(int j=2;j<=k;j++)
  70. strcat(s,cuv[x[j]]);
  71. s[2*k]='\0';fout<<smax<<endl;
  72. if(strcmp(s,smax)>=0)
  73. strcpy(smax,s);
  74. s[0]='\0';
  75. }
  76. else
  77. back(k+1);
  78. }
  79. }
  80. }
  81.  
  82. int main()
  83. {
  84. int i, j;
  85. fin>>n;
  86. fin.get();
  87. for(i=1;i<=n;i++)
  88. fin>>cuv[i];
  89. for(i=1;i<n;i++)
  90. for(j=i+1;j<=n;j++)
  91. if(strcmp(cuv[i],cuv[j])>0)
  92. swap(cuv[i],cuv[j]);
  93. smax[0]='\0';
  94. Backr(1);
  95. fout<<"MAX= "<<smax;
  96. return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement