rooq37

PPMARIANSKILAB9

Dec 4th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.85 KB | None | 0 0
  1. ***Graf.java***
  2.  
  3. import java.util.List;
  4.  
  5. public interface Graf<W, S> {
  6. public List<W> wierzcholki(); //zwraca wszystkie wierzcholki grafu
  7.  
  8. public S krawedz(W w1, W w2); //pobiera etykietę krawędzi pomiędzy wierzchołkami
  9. //wartość NULL oznacza brak krawędzi
  10.  
  11. public List<W> krawedzie(W w); //zwraca wierzchołki, do których istnieje krawędz z w
  12. }
  13.  
  14. ***GrafSkierowany.java***
  15.  
  16. import java.util.ArrayList;
  17. import java.util.List;
  18.  
  19. /**
  20. * Created by Mateusz on 2017-12-04.
  21. */
  22. public class GrafSkierowany<W,S> implements Graf<W,S> {
  23. private List<W> listaWierzcholkow;
  24. private List<List<W>> listaSasiedztwaWierzcholkow;
  25. private List<List<S>> listaSasiedztwaKrawedzi;
  26.  
  27. public GrafSkierowany(List<W> lW, List<List<W>> lSW, List<List<S>> lSK){
  28. listaWierzcholkow = lW;
  29. listaSasiedztwaWierzcholkow = lSW;
  30. listaSasiedztwaKrawedzi = lSK;
  31. }
  32.  
  33. @Override
  34. public List<W> wierzcholki(){
  35. return listaWierzcholkow;
  36. }
  37.  
  38. @Override
  39. public S krawedz(W w1, W w2){
  40. int i=0;
  41. for(;i<listaWierzcholkow.size();i++){
  42. if(w1.equals(listaWierzcholkow.get(i))){
  43. break;
  44. }
  45. }
  46. for(int j=0; j<listaSasiedztwaWierzcholkow.get(i).size();j++){
  47. if(w2.equals(listaSasiedztwaWierzcholkow.get(i).get(j))){
  48. return listaSasiedztwaKrawedzi.get(i).get(j);
  49. }
  50. }
  51. return null;
  52. }
  53.  
  54. @Override
  55. public List<W> krawedzie(W w){
  56. int i=0;
  57. for(;i<listaWierzcholkow.size();i++){
  58. if(w.equals(listaWierzcholkow.get(i))){
  59. break;
  60. }
  61. }
  62. return listaSasiedztwaWierzcholkow.get(i);
  63. }
  64. }
  65.  
  66. ***GrafTest.java***
  67. import java.util.ArrayList;
  68. import java.util.List;
  69.  
  70. public class GrafTest {
  71.  
  72. public static int stopienGrafu(GrafSkierowany graf){
  73. int stopnieW[] = new int[graf.wierzcholki().size()];
  74. int max = 0;
  75. for(int i=0; i<stopnieW.length;i++) {
  76. if(graf.krawedz(graf.wierzcholki().get(i),graf.wierzcholki().get(i))!=null) {
  77. stopnieW[i]+=2;
  78. }
  79. }
  80. for(int i=0; i<stopnieW.length;i++) {
  81. for(int j=0; j<stopnieW.length;j++){
  82. if(graf.krawedz(graf.wierzcholki().get(i),graf.wierzcholki().get(j))!=null && i!=j) {
  83. stopnieW[i]++;
  84. }
  85. }
  86. }
  87. for(int i=0; i<stopnieW.length;i++) {
  88. for(int j=0; j<stopnieW.length;j++){
  89. if(graf.krawedz(graf.wierzcholki().get(j),graf.wierzcholki().get(i))!=null && i!=j) {
  90. stopnieW[i]++;
  91. }
  92. }
  93. }
  94. for(int i=0; i<stopnieW.length;i++){
  95. System.out.println(stopnieW[i]);
  96. if(max<stopnieW[i]){
  97. max = stopnieW[i];
  98. }
  99. }
  100. return max;
  101. }
  102.  
  103. public static boolean isGraphCyclic(GrafSkierowany graf, int wierzcholek, char[] odwiedzone){
  104. odwiedzone[wierzcholek] = 's';
  105. for(int i=0; i<graf.krawedzie(graf.wierzcholki().get(wierzcholek)).size();i++){
  106. if(odwiedzone[i]=='s'){
  107. return true;
  108. }else if(isGraphCyclic(graf,i,odwiedzone)==true){
  109. return true;
  110. }
  111. }
  112. odwiedzone[wierzcholek]='c';
  113. return false;
  114. }
  115.  
  116. public static boolean isCyclic(GrafSkierowany graf){
  117. char[] odwiedzone = new char[graf.wierzcholki().size()];
  118. for(int i=0; i<odwiedzone.length; i++){
  119. odwiedzone[i] = 'b';
  120. }
  121. for(int i=0; i<graf.wierzcholki().size();i++){
  122. if(isGraphCyclic(graf,i,odwiedzone)==true){
  123. return true;
  124. }
  125. }
  126. return false;
  127. }
  128.  
  129. public static void main(String[] args) {
  130. Integer w1 = new Integer(1);
  131. Integer w2 = new Integer(2);
  132. Integer w3 = new Integer(3);
  133. String k1_2 = new String("1do2");
  134. String k1_3 = new String("1do3");
  135. String k2_3 = new String("2do3");
  136. String k3_1 = new String("3do1");
  137.  
  138. List<Integer> lW = new ArrayList<Integer>();
  139. lW.add(w1);
  140. lW.add(w2);
  141. lW.add(w3);
  142.  
  143. List<List<Integer>> lSW = new ArrayList<List<Integer>>();
  144. List<List<String>> lSK = new ArrayList<List<String>>();
  145. for(int i=0; i<3; i++){
  146. lSW.add(new ArrayList<Integer>());
  147. lSK.add(new ArrayList<String>());
  148. }
  149.  
  150. lSW.get(0).add(w2);
  151. lSW.get(0).add(w3);
  152. lSW.get(1).add(w3);
  153. lSW.get(2).add(w1);
  154.  
  155. lSK.get(0).add(k1_2);
  156. lSK.get(0).add(k1_3);
  157. lSK.get(1).add(k2_3);
  158. lSK.get(2).add(k3_1);
  159.  
  160.  
  161. GrafSkierowany<Integer, String> test = new GrafSkierowany(lW,lSW,lSK);
  162. /*
  163. for(int i=0; i<test.wierzcholki().size();i++){
  164. System.out.print(test.wierzcholki().get(i)+", ");
  165. }
  166. System.out.println();
  167. System.out.println(test.krawedz(w1,w2));
  168. System.out.println(test.krawedz(w1,w3));
  169. System.out.println(test.krawedz(w2,w3));
  170. System.out.println(test.krawedz(w3,w1));
  171.  
  172. for(int i=0; i<test.krawedzie(w1).size();i++){
  173. System.out.print(test.krawedzie(w1).get(i)+", ");
  174. }
  175. System.out.println();
  176.  
  177. for(int i=0; i<test.krawedzie(w2).size();i++){
  178. System.out.print(test.krawedzie(w2).get(i)+", ");
  179. }
  180. System.out.println();
  181.  
  182. for(int i=0; i<test.krawedzie(w3).size();i++){
  183. System.out.print(test.krawedzie(w3).get(i)+", ");
  184. }
  185. System.out.println();
  186. */
  187. System.out.println("Stopien grafu: "+stopienGrafu(test));
  188. System.out.println("Czy graf jest cykliczny: "+isCyclic(test));
  189. }
  190. }
Advertisement
Add Comment
Please, Sign In to add comment