Nadesłany przez Tomasz Lubiński, 09 maja 2007 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
AlgorytmHolta.java:
/**
* www.algorytm.org
* Algorytm Holt'a - detekcja zakleszczenia
* (c)2005 Tomasz Lubinski
*/
public class AlgorytmHolta {
public static void main(String[] args) {
int p,z,j,k,tmp,flaga;
int E[][][] = new int[2][10][10];
int A[][] = new int[10][10];
int f[] = new int[10];
int I[] = new int[10];
int c[] = new int[11];
System.out.println("Podaj liczbe procesow (max. 10)");
p = Console.readInt("?");
System.out.println("Podaj liczbe zasobow (max. 10)");
z = Console.readInt("?");
// pobranie danych
for (k=0; k<p; k++)
for (j=0; j<z; j++)
{
System.out.println("Podaj ile zasobu "+ (j+1) +" posiada proces "+ (k+1));
A[k][j] = Console.readInt("?");
}
for (k=0; k<p; k++)
for (j=0; j<z; j++)
{
System.out.println("Podaj ile zasobu "+ (j+1) +" moze jeszcze zazadac proces "+ (k+1));
E[0][k][j] = Console.readInt("?");
E[1][k][j]=k;
}
for (j=0; j<z; j++)
{
System.out.println("Podaj ile zasobu "+ (j+1) +" jest jeszcze wolne w systemie");
f[j] = Console.readInt("?");
}
// algorytm Holt'a
// posortowanie zadan procesow (bubble sort)
for (j=0; j<z; j++)
{
flaga=1;
while (flaga==1)
{
flaga=0;
for (k=0; k<p-1; k++)
if (E[0][k][j]>E[0][k+1][j])
{
flaga=1;
tmp=E[0][k][j];
E[0][k][j]=E[0][k+1][j];
E[0][k+1][j]=tmp;
tmp=E[1][k][j];
E[1][k][j]=E[1][k+1][j];
E[1][k+1][j]=tmp;
}
}
}
for (k=0; k<z; k++) I[k]=0;
for (k=1; k<=p; k++) c[k]=z;
c[0]=p;
// wlasciwa częsc algorytmu
do
{
flaga=0;
for (j=0; j<z; j++)
while ((I[j]<p)&&(E[0][I[j]][j]<=f[j]))
{
c[E[1][I[j]][j]+1]=c[E[1][I[j]][j]+1]-1;
if (c[E[1][I[j]][j]+1]==0)
{
c[0]--;
flaga=1;
for (k=0; k<z; k++)
f[k]=f[k]+A[E[1][I[j]][j]][k];
}
I[j]++;
}
}while ((flaga==1)&&(c[0]>0));
if (flaga==1)
System.out.println("Nie ma zakleszczenia");
else
System.out.println("Istnieje zakleszczenie");
System.out.print("Zbior zadan zakleszczonych: {");
for (k=1; k<=p; k++) if (c[k]!=0) System.out.print(" " + k);
System.out.println(" }");
}
}

