Advertisement
Guest User

Untitled

a guest
May 24th, 2016
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.77 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class Naloga3 {
  4.  
  5.     private static int cost;
  6.    
  7.     public static void main(String[] args) {   
  8.        
  9.         Scanner sc = new Scanner(System.in);
  10.        
  11.         //String type = args[0];
  12.        
  13.         int n = sc.nextInt(); sc.nextInt();
  14.         cost = Integer.MAX_VALUE;
  15.         int[][] adj = new int[n][n];
  16.         int[][] adjt = new int[n][n];
  17.         int[] visited = new int[n];
  18.         Arrays.fill(visited, 0);
  19.         int[] min = new int[n];
  20.         Arrays.fill(min, Integer.MAX_VALUE);
  21.         int[] path = new int[n];
  22.         Arrays.fill(path, -1);
  23.         int pi = 0;
  24.        
  25.         for (int i = 0; i < adj.length; i++) {
  26.             for (int j = 0; j < adj[i].length; j++) {
  27.                 adj[i][j] = sc.nextInt();
  28.                 if (adj[i][j] != 0 && adj[i][j] < min[i]) min[i] = adj[i][j];
  29.             }
  30.         }
  31.        
  32.         Arrays.sort(min);
  33.        
  34.         visited[0] = 1;
  35.         path[pi++] = 0;
  36.         TSPBacktracking(adj, visited, 0, 0, path, pi, 0, min);
  37.        
  38.     }
  39.    
  40.     static int cnt = 0;
  41.    
  42.     private static void TSPBacktracking(int[][] adj, int[] visited, int node, int c, int[] path, int pi, int num, int[] min) {
  43.        
  44.         if (visited(visited)) {        
  45.             int cst = c + adj[path[path.length-1]][0];
  46.             if (cst < cost) {
  47.                 cost = cst;
  48.                 System.out.print(cst + ":");
  49.                 for (Integer i : path) System.out.print(" " + i);
  50.                 System.out.println();
  51.             }
  52.         }
  53.        
  54.         for (int i = 0; i < visited.length; i++) {
  55.             if (visited[i] == 0) {
  56.                 visited[i] = 1;
  57.                 path[pi++] = i;
  58.                
  59.                 int cst = c + adj[node][i];
  60.                 int mp = 0;
  61.                 for (int k = 0; k < adj.length - num - 1; k++) mp += min[k];
  62.                
  63.                 if (cst < cost - mp) {
  64.                     TSPBacktracking(adj, visited, i, cst, path, pi, num + 1, min);
  65.                     visited[i] = 0;
  66.                     path[--pi] = -1;
  67.                 }
  68.             }
  69.         }
  70.     }
  71.  
  72.     private static boolean visited(int[] v) {
  73.         for (int i = 0; i < v.length; i++) if (v[i] == 0) return false;
  74.         return true;
  75.     }
  76.  
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement