fork download
  1. #include <stdio.h>
  2.  
  3. int main(void) {
  4.  
  5. printf("Enter the number of states : ");
  6. int n;
  7. scanf("%d",&n);
  8. int set1[n],set2[n],f,q[n][2];//for Equivalents
  9. for(int i=0;i<n;i++){
  10. printf("\nq[%d][0] = ",i);
  11. scanf("%d",&q[i][0]);
  12. printf("\nq[%d][1] = ",i);
  13. scanf("%d",&q[i][1]);
  14. }
  15. printf("\n\nEnter the number of Final states : ");
  16. scanf("%d",&f);
  17. int final[f];
  18. for(int i=0;i<f;i++){
  19. printf("\nFinal States : ");
  20. scanf("%d",&final[i]);
  21. }
  22.  
  23. /*for(int r=0;r<n;r++){
  24. printf("\nq[%d][0]=%d",r,q[r][0]);
  25. printf("\nq[%d][1]=%d",r,q[r][1]);
  26. }*/
  27.  
  28. int flag=0,temp[n],t=0,cont=0;
  29. for(int i=0;i<n;i++){
  30. flag=0;
  31. cont=0;
  32. for(int k=0; k<n;k++){
  33. if(i==temp[k]){
  34. cont=1;
  35. }
  36. }
  37. if(cont==1){
  38. continue;
  39. }
  40. for(int j=0;j<n;j++){
  41. if(i==q[j][0] || i==q[j][1]){
  42. flag=1;
  43. break;
  44. }
  45. }
  46. if(flag==0){
  47. temp[t]=i;
  48. t++;
  49. q[i][0]=-1;
  50. q[i][1]=-1;
  51. set1[i]=-1;
  52. set2[i]=-1;
  53. i=-1;
  54. }
  55. }
  56. printf("\n\nRemoved unreachable states :-");
  57. t=0;
  58. for(int r=0;r<n;r++){
  59. if(q[r][0]!=-1){
  60. printf("\nq[%d][0]=%d",r,q[r][0]);
  61. printf("\nq[%d][1]=%d",r,q[r][1]);
  62. if(r==final[t]){
  63. set1[r]=1;
  64. if(t<f){
  65. t++;
  66. }
  67. }else{
  68. set1[r]=0;
  69. }
  70. }
  71. }
  72.  
  73.  
  74. set2[0]=0;
  75. int exit=0;
  76. int a=0,b=0,x1=0,x2=0,y1=0,y2=0;
  77. while(exit==0){
  78. t=0;
  79. for(a=1;a<n;a++){
  80. flag=0;
  81. if(set1[a]!=-1){
  82. for(b=0;b<a;b++){
  83. if(set1[b]!=-1){
  84. if(set1[a]==-1 || set1[b]==-1){
  85. printf("\nHello");
  86. }
  87. if(set1[a]==set1[b]){
  88. x1=q[a][0];
  89. x2=q[b][0];
  90. y1=q[a][1];
  91. y2=q[b][1];
  92. if(set1[x1]==set1[x2] && set1[y1]==set1[y2]){
  93. set2[a]=set2[b];
  94. flag=1;
  95. break;
  96. }
  97. }
  98. }else{
  99. printf("\nSKIPED b=%d",b);
  100. }
  101. }
  102. if(flag==0){
  103. printf("\nt=%d",t);
  104. t++;
  105. set2[a]=t;
  106. }
  107. }else{
  108. printf("\nSKIPED a=%d",a);
  109. }
  110. }
  111. cont=0;
  112. for(int i=0;i<n;i++){
  113. if(set1[i]!=set2[i]){
  114. cont=1;
  115. break;
  116. }
  117. }
  118. if(cont==0){
  119. exit=1;
  120. }else{
  121. for(int i=0;i<n;i++){
  122. set1[i]=set2[i];
  123. }
  124. }
  125. }
  126. for(int i=0;i<n;i++){
  127. if(set1[i]!=-2){
  128. // printf("\nset1[%d]=%d",i,set1[i]);
  129. printf("\nset2[%d]=%d",i,set2[i]);
  130. }
  131. }
  132.  
  133.  
  134.  
  135. return 0;
  136. }
  137.  
  138.  
Success #stdin #stdout 0s 4524KB
stdin
8
1
5
6
2
0
2
2
6
7
5
2
6
6
4
6
2
1
2
stdout
Enter the number of states : 
q[0][0] = 
q[0][1] = 
q[1][0] = 
q[1][1] = 
q[2][0] = 
q[2][1] = 
q[3][0] = 
q[3][1] = 
q[4][0] = 
q[4][1] = 
q[5][0] = 
q[5][1] = 
q[6][0] = 
q[6][1] = 
q[7][0] = 
q[7][1] = 

Enter the number of Final states : 
Final States : 

Removed unreachable states :-
q[0][0]=1
q[0][1]=5
q[1][0]=6
q[1][1]=2
q[2][0]=0
q[2][1]=2
q[4][0]=7
q[4][1]=5
q[5][0]=2
q[5][1]=6
q[6][0]=6
q[6][1]=4
q[7][0]=6
q[7][1]=2
t=0
t=1
SKIPED a=3
SKIPED b=3
t=2
t=0
t=1
SKIPED a=3
SKIPED b=3
t=2
SKIPED b=3
t=3
t=0
t=1
SKIPED a=3
SKIPED b=3
t=2
SKIPED b=3
t=3
set2[0]=0
set2[1]=1
set2[2]=2
set2[3]=-1
set2[4]=0
set2[5]=3
set2[6]=4
set2[7]=1