Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- public class F {
- /**
- * @param args
- */
- public static void main(String[] args) {
- Scanner scan = new Scanner(System.in);
- int n = scan.nextInt();
- int cases = 1;
- while (n != 0) {
- int[][] adj = new int[n][n];
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- adj[i][j] = scan.nextInt();
- if (adj[i][j] == 0) {
- adj[i][j] = Integer.MAX_VALUE;
- }
- }
- }
- int m = scan.nextInt();
- int[] path = new int[m];
- for (int i = 0; i < m; i++) {
- path[i] = scan.nextInt();
- }
- int dist[] = new int[m];
- for (int i = 1; i < m; i++) {
- dist[i] = dist[i-1] + adj[path[i-1]][path[i]];
- }
- //System.out.println(Arrays.toString(dist));
- for (int k = 0; k < n; k++) {
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- if (adj[i][k] != Integer.MAX_VALUE && adj[j][k] != Integer.MAX_VALUE)
- adj[i][j] = Math.min(adj[i][j], adj[i][k] + adj[k][j]);
- }
- }
- }
- //for (int i = 0; i < n; i++) {
- // System.out.println(Arrays.toString(adj[i]));
- //}
- int fixed = 0;
- int start = 0;
- for (int i = 1; i < m; i++) {
- if (adj[path[start]][path[i]] < dist[i]) {
- for (int j = i+1; j < m; j++) {
- dist[j] -= (dist[i] - dist[start]);
- }
- start = i;
- fixed++;
- }
- }
- System.out.printf("Cases %d: %d", cases, fixed);
- cases++;
- n = scan.nextInt();
- if ( n != 0 )
- System.out.println();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement