Advertisement
Guest User

Untitled

a guest
Dec 13th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.87 KB | None | 0 0
  1. package spa2;
  2.  
  3. import java.util.*;
  4.  
  5. import java.io.BufferedReader;
  6. import java.io.IOException;
  7. import java.util.Comparator;
  8.  
  9. import org.svetovid.Svetovid;
  10.  
  11. public class PostojanjePuta {
  12.  
  13. public static void main(String[] args) throws IOException {
  14. PostojanjePuta put = new PostojanjePuta();
  15. put.stampaj();
  16. Put putanja = new Put();
  17. PoBlagoPolj kom = new PoBlagoPolj();
  18. KompBlago komp2 = new KompBlago();
  19. KompDuz komp = new KompDuz();
  20. BrojUza kompb = new BrojUza();
  21. postojiPut2(0, 0, putanja, false);
  22. System.out.println("Putanja je " + put.optput);
  23. // System.out.println("Njena vrednost je " + put.optput.vrednost());
  24. // System.out.println("Broj uzastopnih polja sa blagom je " +
  25. // put.optput.getBrojuza());
  26. }
  27.  
  28. public final static int IZLAZ = -99;
  29. public final static int ZID = -11;
  30. public final static int RUPA = -1;
  31.  
  32. private static int visina, sirina;
  33. // matrica sa mapom
  34. private static int[][] mat;
  35. // mastrica posecenosti polja
  36. private static boolean[][] pos;
  37. private static Put optput; // pamti optimalni put
  38. private static boolean blago;
  39. private static boolean rupa;
  40.  
  41. public PostojanjePuta() throws IOException {
  42. mat = ucitaj("lavrupe.txt");
  43.  
  44. }
  45.  
  46. private static int[][] ucitaj(String imeFajla) {
  47. if (Svetovid.testIn(imeFajla)) {
  48. visina = Svetovid.in(imeFajla).readInt();
  49. sirina = Svetovid.in(imeFajla).readInt();
  50. if (visina >= 0 && sirina >= 0) {
  51. mat = new int[visina][sirina];
  52. pos = new boolean[visina][sirina];
  53. for (int i = 0; i < visina; i++) {
  54. for (int j = 0; j < sirina; j++) {
  55. mat[i][j] = Svetovid.in(imeFajla).readInt();
  56. }
  57. }
  58. Svetovid.closeIn(imeFajla);
  59. return mat;
  60. }
  61. }
  62. return null;
  63.  
  64. }
  65.  
  66. public void stampaj() {
  67. for (int i = 0; i < visina; i++) {
  68. for (int j = 0; j < sirina; j++) {
  69. System.out.print(mat[i][j] + "\t");
  70. }
  71. System.out.println();
  72. }
  73. }
  74.  
  75. public static void postojiPut3(int x, int y, Put putanja, int v) {
  76. if (x < 0 || x >= visina || y < 0 || y >= sirina) {
  77. return;
  78. }
  79. if (pos[x][y] || mat[x][y] == ZID) {
  80. return;
  81. }
  82. if (mat[x][y] == IZLAZ) {
  83. putanja.add(x, y, 0);
  84. optput = putanja.copy();
  85. putanja.remove();
  86. return;
  87. }
  88. if (mat[x][y] - v <= 3) {
  89.  
  90. }
  91.  
  92. }
  93.  
  94. public static void postojiPut2(int x, int y, Put putanja, boolean rupa) { // zadatak sa preskakanjem rupa
  95. if (x < 0 || x >= visina || y < 0 || y >= sirina) {
  96. return;
  97. }
  98. if (pos[x][y] || mat[x][y] == ZID) {
  99. return;
  100. }
  101. if (mat[x][y] == IZLAZ) {
  102. putanja.add(x, y, 0);
  103. optput = putanja.copy();
  104. putanja.remove();
  105. return;
  106. }
  107. if (mat[x][y] == RUPA && !rupa) { // ako moze da preskoci
  108. pos[x][y] = true;
  109. rupa = true;
  110. putanja.add(x, y, mat[x][y]);
  111.  
  112. } else if (mat[x][y] == RUPA && rupa) {
  113. rupa = true;
  114. return;
  115. }
  116. if (mat[x][y] != RUPA) {
  117. pos[x][y] = true;
  118. putanja.add(x, y, mat[x][y]);
  119. rupa = false;
  120. }
  121. postojiPut2(x + 1, y, putanja, rupa);
  122. postojiPut2(x, y - 1, putanja, rupa);
  123. postojiPut2(x - 1, y, putanja, rupa);
  124. postojiPut2(x, y + 1, putanja, rupa);
  125. pos[x][y] = false;
  126. rupa = false;
  127. putanja.remove();
  128. putanja.resetuj();
  129. return;
  130.  
  131. }
  132.  
  133. private static void postojiPut(int x, int y, Put putanja, Comparator<Put> komp, boolean blago) {
  134. if (x < 0 || x >= visina || y < 0 || y >= sirina) {
  135. return;
  136. }
  137. if (pos[x][y] || mat[x][y] == ZID) {
  138. return;
  139. }
  140. if (mat[x][y] == IZLAZ) {
  141. if (optput == null || komp.compare(putanja, putanja) < 0) {
  142. putanja.add(x, y, 0); // dodamo poslednje polje, tj izlaz
  143. optput = putanja.copy();
  144. System.out.println("Broj uzastopnih polja sa blagom je " + putanja.getBrojuza());
  145. if (putanja.getBrojuza() > 3) {
  146. System.out.println(putanja);
  147. }
  148. putanja.remove();
  149. }
  150. return;
  151. }
  152.  
  153. pos[x][y] = true;
  154. if (mat[x][y] != 0) {
  155. if (blago) {
  156. putanja.povecaj(); // ako je prethodno bilo,ovo ce svakako biti
  157. }
  158. blago = true;
  159.  
  160. } else {
  161. blago = false;
  162. putanja.resetuj();
  163. }
  164. putanja.add(x, y, mat[x][y]);
  165. postojiPut(x + 1, y, putanja, komp, blago);
  166. postojiPut(x, y - 1, putanja, komp, blago);
  167. postojiPut(x - 1, y, putanja, komp, blago);
  168. postojiPut(x, y + 1, putanja, komp, blago);
  169.  
  170. pos[x][y] = false;
  171. putanja.remove();
  172. blago = false;
  173. putanja.resetuj();
  174. return;
  175.  
  176. }
  177.  
  178. }
  179.  
  180.  
  181. class KompDuz implements Comparator<Put> {
  182.  
  183. @Override
  184. public int compare(Put r1, Put r2) {
  185. return r1.size() - r2.size();
  186. }
  187.  
  188. }
  189.  
  190. class BrojUza implements Comparator<Put> {
  191. public int compare(Put r1, Put r2) {
  192. return r2.getBrojuza() - r1.getBrojuza();
  193. }
  194.  
  195. }
  196.  
  197. class PoBlagoPolj implements Comparator<Put> {
  198.  
  199. public int compare(Put r1, Put r2) {
  200. return r2.getBrojBlaga() - r1.getBrojBlaga();
  201. }
  202.  
  203. }
  204.  
  205. class KompBlago implements Comparator<Put> {
  206.  
  207. @Override
  208. public int compare(Put r1, Put r2) {// - ide r1, + r2
  209. return -(r1.vrednost() - r2.vrednost());
  210. }
  211.  
  212. }
  213.  
  214. public class Put {
  215.  
  216. public ArrayList<Polje> putanja;
  217. private int brojBlaga;
  218. private int brojuza;
  219. private int brojuzamax;
  220. private boolean skok;
  221. private int brojskokova;
  222.  
  223. public Put() {
  224. putanja = new ArrayList<Polje>();
  225. brojBlaga = 0;
  226. brojuza = 0;
  227. brojuzamax = 0;
  228. skok = false;
  229. brojskokova = 0;
  230. }
  231.  
  232. public String toString() {
  233. String s = "";
  234. int i = 0;
  235. if (putanja != null) {
  236. for (Polje tmp : putanja) {
  237. s += (tmp);
  238. s += "\n";
  239. }
  240. }
  241. return s;
  242. }
  243.  
  244. public int getSkokovi() {
  245. return brojskokova;
  246. }
  247.  
  248. public void skoci() {
  249. skok = true;
  250. brojskokova++;
  251. }
  252.  
  253. public void resetuj() {
  254. if (brojuza != 0) {
  255. if (brojuzamax == 0)
  256. brojuzamax = brojuza;
  257. if (brojuzamax != 0 && brojuza > brojuzamax)
  258. brojuzamax = brojuza;
  259. }
  260.  
  261. brojuza = 0;
  262. }
  263.  
  264. public void povecaj() {
  265. brojuza++;
  266. }
  267.  
  268. public int getBrojuza() {
  269. return brojuzamax;
  270. }
  271.  
  272. public int getBrojBlaga() {
  273. return brojBlaga;
  274. }
  275.  
  276. public int vrednost() {
  277. int n = 0;
  278. for (Polje m : putanja) {
  279. n += m.getV();
  280. }
  281. return n;
  282. }
  283.  
  284. public void add(int x, int y, int v) {
  285. Polje novo = new Polje(x, y, v);
  286. if (v != 0)
  287. brojBlaga++;
  288. putanja.add(novo);
  289. }
  290.  
  291. public void remove() {
  292. putanja.remove(putanja.size() - 1);
  293. }
  294.  
  295. public int size() {
  296. return putanja.size();
  297. }
  298.  
  299. public Put copy() {
  300. Put novi = new Put();
  301. novi.putanja = (ArrayList<Polje>) putanja.clone();
  302. return novi;
  303. }
  304.  
  305. }
  306.  
  307. class Polje {
  308.  
  309. private int x, y, v;
  310.  
  311. public int getX() {
  312. return x;
  313.  
  314. }
  315.  
  316. public String toString() {
  317. return "(" + x + " " + y + " (" + v + ")" + ")";
  318. }
  319.  
  320. public void setX(int x) {
  321. this.x = x;
  322. }
  323.  
  324. public int getY() {
  325. return y;
  326. }
  327.  
  328. public void setV(int x) {
  329. this.v = x;
  330. }
  331.  
  332. public int getV() {
  333. return v;
  334. }
  335.  
  336. public void setY(int y) {
  337. this.y = y;
  338. }
  339.  
  340. public Polje(int x, int y, int v) {
  341. this.x = x;
  342. this.y = y;
  343. this.v = v;
  344. }
  345.  
  346. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement