Advertisement
Guest User

Untitled

a guest
Jun 24th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include "stdlib.h"
  4. #include "time.h"
  5. #include "string.h"
  6. #define SIZE 7
  7. #define DIM 21
  8. // A,B,C,D,E,F,ERD
  9. char ERD[SIZE][SIZE] = { {0,1,0,0,0,0,0},//A
  10. {1,0,2,0,4,0,0},//B
  11. {0,2,0,3,0,5,6},//C
  12. {0,0,3,0,0,0,9},//D
  13. {0,4,0,0,0,7,0},//E
  14. {0,0,5,0,7,0,8},//F
  15. {0,0,6,9,0,8,0} };//ERD
  16. char COL[DIM] = {0,0,0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6};
  17. char SEL[SIZE] = {0,0,0,0,0,0,0};
  18. char FROM[SIZE];
  19.  
  20. char level[SIZE] = {0,1,0,0,0,0,0};
  21. char ptr[SIZE] = {0,0,0,0,0,0,0};
  22.  
  23. bool cover()
  24. {
  25. for (int i = 0; i < SIZE; i++) if (SEL[i] && level[i] == 0)return false;
  26. return true;
  27. }
  28.  
  29. void span(int n)
  30. {
  31. for (int j = 0; j < SIZE; j++)if (level[j] == 0)
  32. {
  33. int m = 0;
  34. for (int i = 0; i < SIZE; i++)if (ERD[i][j] && level[i] == n)
  35. {
  36. level[j] = n + 1;
  37. if (rand() % (++m) == 0)ptr[j] = i + 1;
  38. }
  39. }
  40. }
  41. int main()
  42. {
  43.  
  44. srand(time(NULL)); rand();
  45. char input[30];
  46. gets_s(input);
  47. for (int i = 0; i < strlen(input); i++)SEL[i] = 0;
  48. // SELECT
  49. for (int i = 0; i < strlen(input); i++)if (input[i] >= 'A'&&input[i] < ('A' + DIM))SEL[COL[input[i] - 'A']] = 1;
  50. printf("\nSELECT\t"); for (int i = 0; i < strlen(input); i++)if (input[i] >= 'A'&&input[i] < ('A' + DIM))printf("T%d.%c\t", COL[input[i] - 'A'], input[i]);
  51.  
  52. printf("\n"); for (int i = 0; i < SIZE; i++) { FROM[i] = level[i] = ptr[i] = 0; FROM[i] = SEL[i]; };
  53. level[0] = 1;
  54. int n = 1;
  55. while (!cover())span(n++);
  56.  
  57. while (n-- > 1)for (int i = 0; i < SIZE; i++)if (level[i] == (n + 1) && FROM[i])FROM[ptr[i] - 1] = 1;
  58. printf("FROM\t"); for (int i = 0; i < SIZE; i++)if (FROM[i])printf("T%d\t",i);
  59.  
  60. printf("\n\nWHERE\t"); for (int i = 0; i < strlen(input); i++)if (input[i] >= 'a'&& input[i] < ('a' + DIM))printf("T%d.%c = %c\t", COL[input[i] - 32 - 'A'], input[i] - 32, input[i]);
  61. printf("\n"); for (int j = 0; j < SIZE; j++)if (level[j] > 1 && FROM[j])printf("\t& T%d.x = T%d.y\n", ptr[j] - 1, j);
  62.  
  63. return 0;
  64.  
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement