Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Fabryka lodów każdego dnia produkuje na tej samej maszynie lody o sześciu różnych smakach.
- Zmiana produkcji ze smaku i na smak j wymaga przestrojenia maszyny, czyli przygotowania
- (w tym umycia) do nowej produkcji, które trwa określony czas. Podana niżej tablica zawiera
- informację o czasach przestrojenia maszyny.
- i\j
- 1 2 3 4 5 6
- 1 0 7 20 21 12 23
- 2 27 0 13 16 46 5
- 3 53 15 0 25 27 6
- 4 16 2 35 0 47 10
- 5 31 29 5 18 0 4
- 6 28 24 1 17 5 0
- Znaleźć kolejność produkcji, przy której całkowity czas przestrojenia maszyny jest minimalny. Przyjąć, że na koniec dnia maszyna ma być przygotowana do produkcji w następnym dniu.
- Odp: Minimalny całkowity czas przestrojenia maszyny wynosi 63. Oto przykładowa kolejność
- produkcji lodów, dla której całkowity czas przestrojenia maszyny jest minimalny: 1,2,6,5,3,4,1.
- */
- package aisd;
- public class Zad2_2_5 {
- final static int N = 6; // permutacje n-elementowe
- private static int[] l = new int[N];
- private static int[][] tabSmak = {{0, 7, 20, 21, 12, 23},{27, 0, 13, 16, 46, 5},{53, 15, 0, 25, 27, 6},{16, 2, 35, 0, 47, 10},{31, 29, 5, 18, 0, 4},{28, 24, 1, 17, 5, 0} };
- private static int[] najKomb = new int[N];
- private static int najmniejszyCzas = Integer.MAX_VALUE;;
- private static int czasPrzestrojenia;
- private static int aktualnyCzas;
- public static void main(String[] args) {
- permutacje(0);
- }
- static int liczCzas(int[] l)
- {
- int zliczCzas = 0;
- for (int i = 0; i < l.length-2; i++)
- {
- zliczCzas += tabSmak[ l[i] ] [ l[i+1] ];
- }
- zliczCzas += tabSmak[l[l.length]][l[0]];
- return zliczCzas;
- }
- static void permutacje(int i) {
- if (i == N) {
- for (int j = 0; j < N; j++) {
- aktualnyCzas += liczCzas(l);
- if(aktualnyCzas<najmniejszyCzas)
- {
- najmniejszyCzas = aktualnyCzas;
- for (int m = 0; m < najmniejszyCzas; m++)
- {
- najKomb[m] = l[m];
- }
- }
- System.out.print(l[j] + " ");
- }
- System.out.println();
- }
- else
- {
- for (int j = 1; j <= N; j++) {
- int k;
- for (k = 0; k < i; k++) {
- if (l[k] == j) {
- break;
- }
- }
- if (k == i) {
- l[k] = j;
- permutacje(i + 1);
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement