Advertisement
fensa08

[APS] Kolokvium 2 - Vkupen Broj na Patista

Jan 20th, 2020
934
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.65 KB | None | 0 0
  1. Вкупен број на патишта Problem 7 (0 / 0)
  2.  
  3. Да се испечати вкупниот број на патишта со должина N кои почнуваат од некое фиксно теме V во неориентиран нетежински граф.
  4.  
  5. Влез: Во првиот ред е даден бројот на јазли, во вториот ред е даден бројот на ребра, а потоа во следните редови се дадени ребрата во графот. Во претпоследниот ред се дадени темето V и во последниот ред, должината N на патиштата.
  6.  
  7. Излез: Испечатете го вкупниот број на патишта со должина N. Јазлите во патот можат да се повторуваат.
  8.  
  9. Во дадениот пример, постојат два пата 0 1 2 и 0 1 0, кои почнуваат од јазолот 0 и имаат должина 2.
  10.  
  11. Име на класата (Java): PathCount.
  12. =======================================================================================================================================
  13.  
  14. import java.io.BufferedReader;
  15. import java.io.InputStreamReader;
  16. import java.util.Stack;
  17.  
  18. class Graph<E> {
  19.  
  20.     int num_nodes; // broj na jazli
  21.     E nodes[]; // informacija vo jazlite - moze i ne mora?
  22.     int adjMat[][]; // matrica na sosednost
  23.  
  24.     @SuppressWarnings("unchecked")
  25.     public Graph(int num_nodes) {
  26.         this.num_nodes = num_nodes;
  27.         nodes = (E[]) new Object[num_nodes];
  28.         adjMat = new int[num_nodes][num_nodes];
  29.  
  30.         for (int i = 0; i < this.num_nodes; i++)
  31.             for (int j = 0; j < this.num_nodes; j++)
  32.                 adjMat[i][j] = 0;
  33.     }
  34.  
  35.     int adjacent(int x, int y) { // proveruva dali ima vrska od jazelot so
  36.         // indeks x do jazelot so indeks y
  37.         return (adjMat[x][y] != 0) ? 1 : 0;
  38.     }
  39.  
  40.     void addEdge(int x, int y) { // dodava vrska megu jazlite so indeksi x i y
  41.         adjMat[x][y] = 1;
  42.         adjMat[y][x] = 1;
  43.     }
  44.  
  45.     void deleteEdge(int x, int y) {
  46.         // ja brise vrskata megu jazlite so indeksi x i y
  47.         adjMat[x][y] = 0;
  48.         adjMat[y][x] = 0;
  49.     }
  50.  
  51.     E get_node_value(int x) { // ja vraka informacijata vo jazelot so indeks x
  52.         return nodes[x];
  53.     }
  54.  
  55.     void set_node_value(int x, E a) { // ja postavuva informacijata vo jazelot
  56.         // so indeks na a
  57.         nodes[x] = a;
  58.     }
  59.  
  60.     @Override
  61.     public String toString() {
  62.         String ret = "  ";
  63.         for (int i = 0; i < num_nodes; i++)
  64.             ret += nodes[i] + " ";
  65.         ret += "\n";
  66.         for (int i = 0; i < num_nodes; i++) {
  67.             ret += nodes[i] + " ";
  68.             for (int j = 0; j < num_nodes; j++)
  69.                 ret += adjMat[i][j] + " ";
  70.             ret += "\n";
  71.         }
  72.         return ret;
  73.     }
  74.  
  75.     public void printMatrix() {
  76.         for (int i = 0; i < num_nodes; i++) {
  77.             for (int j = 0; j < num_nodes; j++)
  78.                 System.out.print(adjMat[i][j] + " ");
  79.             System.out.println();
  80.         }
  81.     }
  82.  
  83.     public static int counter = 0;
  84.  
  85.     public void dfsVisit(int nodeIndex, int pathLength){
  86.  
  87.         if(pathLength == 0){
  88.             counter++;
  89.             return;
  90.         }
  91.  
  92.         for(int i = 0; i < num_nodes; i++){
  93.             if(adjacent(nodeIndex, i) == 1)
  94.                 dfsVisit(i,pathLength - 1);
  95.         }
  96.  
  97.     }
  98.  
  99.     public int pathCount(int nodeIndex,int pathLength){
  100.         //vasiot kod tuka
  101.  
  102.         if(pathLength == 1){
  103.             System.out.println("1");
  104.         }
  105.  
  106.        
  107.         Stack<Integer> stack = new Stack<>();
  108.         for(int i = 0; i < num_nodes; i++){
  109.             if(adjacent(nodeIndex,i) == 1){
  110.                 dfsVisit(i,pathLength - 1);
  111.             }
  112.         }
  113.  
  114.  
  115.         return counter;
  116.  
  117.     }
  118.  
  119. }
  120.  
  121. public class PathCount {
  122.  
  123.     public static void main(String[] args) throws Exception {
  124.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  125.         int N = Integer.parseInt(br.readLine());
  126.         Graph<Integer> g=new Graph<>(N);
  127.         int M = Integer.parseInt(br.readLine());
  128.         for (int i=0;i<M;i++){
  129.             String line=br.readLine();
  130.             String edgeLine[]=line.split(" ");
  131.             g.addEdge(Integer.parseInt(edgeLine[0]), Integer.parseInt(edgeLine[1]));
  132.         }
  133.         int nodeIndex=Integer.parseInt(br.readLine());
  134.         int pathLength=Integer.parseInt(br.readLine());
  135.         System.out.println(g.pathCount(nodeIndex, pathLength));
  136.         br.close();
  137.  
  138.     }
  139.  
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement