Guest User

Untitled

a guest
Jul 16th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.02 KB | None | 0 0
  1. //JAMES EVANS CSC 447 HW2
  2.  
  3. #include <set>
  4. #include <iostream>
  5. #include <string>
  6.  
  7. using namespace std;
  8.  
  9. bool* actors;
  10. int bestpass = INT_MAX;
  11. string besttransitions = "";
  12.  
  13. string generateState(bool* list);
  14. bool stateUsed(set<string> states, string currentstate);
  15. int runProblem(int pass, string transitions, set<string> states, bool* array);
  16. bool isLegalState(bool* list);
  17.  
  18. void main() {
  19. actors = new bool[4]; //actor[0] = farmer, actor[1] = fox, actor[2] = goose, actor[3] = grain.
  20. actors[0] = false;
  21. actors[1] = false;
  22. actors[2] = false;
  23. actors[3] = false;
  24. set<string> states;
  25.  
  26. runProblem(0, "", states, actors);
  27. cout << besttransitions << endl;
  28. system("pause");
  29. }
  30.  
  31. int runProblem(int pass,string transitions, set<string> states,bool* array) {
  32. //initial state = FFFF, goal state TTTT
  33. if (isLegalState(array) == false) { return 0; }
  34. string currentstate = generateState(array);
  35.  
  36. if (currentstate == "TTTT") {
  37. if (pass < bestpass) { besttransitions = transitions; return 0; }
  38. }
  39.  
  40.  
  41. if (stateUsed(states, currentstate) == true) {
  42. return 0;
  43. }
  44. else { states.insert(currentstate); }
  45.  
  46.  
  47. if (array[0] == array[1]) {
  48.  
  49. string newtransitions = transitions;
  50. bool* newarray = new bool[4];
  51. newarray[0] = array[0];
  52. newarray[1] = array[1];
  53. newarray[2] = array[2];
  54. newarray[3] = array[3];
  55. set<string> newstates;
  56. for (set<string>::iterator it = states.begin(); it != states.end(); ++it) {
  57. newstates.insert(*it);
  58.  
  59. }
  60. newarray[0] = !newarray[0];
  61. newarray[1] = !newarray[1];
  62.  
  63. if (newarray[0] == false) { newtransitions += "Farmer + Fox -->\n"; }
  64. else { newtransitions += "Farmer + Fox <--\n"; }
  65.  
  66. runProblem(pass++, newtransitions, newstates, newarray);
  67.  
  68.  
  69.  
  70. }
  71. if (array[0] == array[2]) {
  72.  
  73. string newtransitions = transitions;
  74. bool* newarray = new bool[4];
  75. newarray[0] = array[0];
  76. newarray[1] = array[1];
  77. newarray[2] = array[2];
  78. newarray[3] = array[3];
  79. set<string> newstates;
  80. for (set<string>::iterator it = states.begin(); it != states.end(); ++it) {
  81. newstates.insert(*it);
  82.  
  83. }
  84. newarray[0] = !newarray[0];
  85. newarray[2] = !newarray[2];
  86.  
  87. if (newarray[0] == false) { newtransitions += "Farmer + Goose -->\n"; }
  88. else { newtransitions += "Farmer + Goose <--\n"; }
  89.  
  90. runProblem(pass++, newtransitions, newstates, newarray);
  91.  
  92.  
  93. }
  94. if (array[0] == array[3]) {
  95.  
  96. string newtransitions = transitions;
  97. bool* newarray = new bool[4];
  98. newarray[0] = array[0];
  99. newarray[1] = array[1];
  100. newarray[2] = array[2];
  101. newarray[3] = array[3];
  102. set<string> newstates;
  103. for (set<string>::iterator it = states.begin(); it != states.end(); ++it) {
  104. newstates.insert(*it);
  105.  
  106. }
  107. newarray[0] = !newarray[0];
  108. newarray[3] = !newarray[3];
  109.  
  110. if (newarray[0] == false) { newtransitions += "Farmer + Grain -->\n"; }
  111. else { newtransitions += "Farmer + Grain <--\n"; }
  112.  
  113. runProblem(pass++, newtransitions, newstates, newarray);
  114.  
  115.  
  116.  
  117. }
  118.  
  119. {
  120.  
  121. string newtransitions = transitions;
  122. bool* newarray = new bool[4];
  123. newarray[0] = array[0];
  124. newarray[1] = array[1];
  125. newarray[2] = array[2];
  126. newarray[3] = array[3];
  127. set<string> newstates;
  128. for (set<string>::iterator it = states.begin(); it != states.end(); ++it) {
  129. newstates.insert(*it);
  130.  
  131. }
  132. newarray[0] = !newarray[0];
  133.  
  134. if (newarray[0] == false) { newtransitions += "Farmer -->\n"; }
  135. else{ newtransitions += "Farmer <--"; }
  136.  
  137. runProblem(pass++, newtransitions, newstates, newarray);
  138.  
  139.  
  140.  
  141. }
  142.  
  143.  
  144.  
  145.  
  146. }
  147.  
  148. bool isLegalState(bool* list) {
  149. if (list[0] != list[2] && (list[2] == list[3] || list[2] == list[1])) {
  150. return false;
  151. }
  152. return true;
  153.  
  154. }
  155.  
  156. string generateState(bool* list) {
  157. string state = "";
  158. if (list[0] == true) state += "T";
  159. else { state += "F"; }
  160. if (list[1] == true) state += "T";
  161. else { state += "F"; }
  162. if (list[2] == true) state += "T";
  163. else { state += "F"; }
  164. if (list[3] == true) state += "T";
  165. else { state += "F"; }
  166.  
  167. return state;
  168. }
  169.  
  170. bool stateUsed(set<string> states, string currentstate) {
  171.  
  172. for (set<string>::iterator it = states.begin(); it != states.end(); ++it) {
  173. if (it == states.find(currentstate)) { return true; }
  174.  
  175. }
  176. return false;
  177.  
  178. }
Add Comment
Please, Sign In to add comment