import java.io.* ;
import java.util.* ;
import java.lang.* ;
class B
{
public static void main
( String args
[ ] ) {
Scanner sc
= new Scanner
( System .
in ) ; System .
out .
println ( "Enter no. of processes:" ) ; int n= sc.nextInt ( ) ;
int i,j;
System .
out .
println ( "Enter MAX matrix" ) ; int max[ ] [ ] = new int [ n] [ 3 ] ;
for ( i= 0 ; i< n; i++ )
{
for ( j= 0 ; j< 3 ; j++ )
{
max[ i] [ j] = sc.nextInt ( ) ;
}
}
System .
out .
println ( "Enter ALLOCATION matrix" ) ; int alloc[ ] [ ] = new int [ n] [ 3 ] ;
for ( i= 0 ; i< n; i++ )
{
for ( j= 0 ; j< 3 ; j++ )
{
alloc[ i] [ j] = sc.nextInt ( ) ;
}
}
System .
out .
println ( "Enter AVAILABLE row" ) ; int avail[ ] = new int [ 3 ] ;
int work[ ] = new int [ 3 ] ;
for ( i= 0 ; i< 3 ; i++ ) {
avail[ i] = sc.nextInt ( ) ;
work[ i] = avail[ i] ;
}
System .
out .
println ( "NEED matrix is:" ) ; int need[ ] [ ] = new int [ n] [ 3 ] ;
for ( i= 0 ; i< n; i++ )
{
for ( j= 0 ; j< 3 ; j++ )
{
need
[ i
] [ j
] = Math .
abs ( max
[ i
] [ j
] - alloc
[ i
] [ j
] ) ; }
}
for ( i= 0 ; i< n; i++ )
{
for ( j= 0 ; j< 3 ; j++ )
{
System .
out .
print ( need
[ i
] [ j
] + " " ) ; }
}
boolean visited[ ] = new boolean [ n] ;
int safeq[ ] = new int [ n] ;
int k= 0 ,count= 0 ,c= 0 ;
boolean flag= false ;
while ( count< n)
{
int initwork[ ] = work;
c++;
for ( i= 0 ; i< n; i++ )
{
for ( j= 0 ; j< 3 ; j++ )
{
if ( ! visited[ i] )
{
if ( need[ i] [ j] > work[ j] )
break ;
}
}
if ( j== 3 && ! visited[ i] )
{
count++;
visited[ i] = true ;
safeq[ k++ ] = i+ 1 ;
for ( j= 0 ; j< 3 ; j++ )
work[ j] += alloc[ i] [ j] ;
}
}
if ( c== n)
{
for ( j= 0 ; j< 3 ; j++ )
{
if ( work[ j] != initwork[ j] )
break ;
}
if ( j== 3 )
{
flag= true ;
break ;
}
}
}
if ( flag== true )
{
System .
out .
println ( "Deadlock. No safe sequence is possible" ) ; }
else
{
System .
out .
println ( "Safe sequence is: " ) ; for ( i= 0 ; i< n; i++ )
System .
out .
print ( "P" + safeq
[ i
] + " " ) ; }
}
}
aW1wb3J0IGphdmEuaW8uKjsKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmNsYXNzIEIKewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkKCXsKCQlTY2FubmVyIHNjPW5ldyBTY2FubmVyKFN5c3RlbS5pbik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciBuby4gb2YgcHJvY2Vzc2VzOiIpOwoJCWludCBuPXNjLm5leHRJbnQoKTsKCQlpbnQgaSxqOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgTUFYIG1hdHJpeCIpOwoJCWludCBtYXhbXVtdPW5ldyBpbnRbbl1bM107CgkJZm9yKGk9MDtpPG47aSsrKQoJCXsKCQkJZm9yKGo9MDtqPDM7aisrKQoJCQl7CgkJCQltYXhbaV1bal09c2MubmV4dEludCgpOwoJCQl9CgkJfQoJCVN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgQUxMT0NBVElPTiBtYXRyaXgiKTsKCQlpbnQgYWxsb2NbXVtdPW5ldyBpbnRbbl1bM107CgkJZm9yKGk9MDtpPG47aSsrKQoJCXsKCQkJZm9yKGo9MDtqPDM7aisrKQoJCQl7CgkJCQlhbGxvY1tpXVtqXT1zYy5uZXh0SW50KCk7CgkJCX0KCQl9CQoJCVN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgQVZBSUxBQkxFIHJvdyIpOwoJCWludCBhdmFpbFtdPW5ldyBpbnRbM107CgkJaW50IHdvcmtbXT1uZXcgaW50WzNdOwoJCWZvcihpPTA7aTwzO2krKyl7CgkJYXZhaWxbaV09c2MubmV4dEludCgpOwoJCXdvcmtbaV09YXZhaWxbaV07CgkJfQoJCVN5c3RlbS5vdXQucHJpbnRsbigiTkVFRCBtYXRyaXggaXM6Iik7CgkJaW50IG5lZWRbXVtdPW5ldyBpbnRbbl1bM107CgkJZm9yKGk9MDtpPG47aSsrKQoJCXsKCQkJZm9yKGo9MDtqPDM7aisrKQoJCQl7CgkJCQluZWVkW2ldW2pdPU1hdGguYWJzKG1heFtpXVtqXS1hbGxvY1tpXVtqXSk7CgkJCX0KCQl9CgkJZm9yKGk9MDtpPG47aSsrKQoJCXsKCQkJZm9yKGo9MDtqPDM7aisrKQoJCQl7CgkJCQlTeXN0ZW0ub3V0LnByaW50KG5lZWRbaV1bal0rIiAiKTsKCQkJfQoJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKCQl9CgkJYm9vbGVhbiB2aXNpdGVkW109bmV3IGJvb2xlYW5bbl07CgkJaW50IHNhZmVxW109bmV3IGludFtuXTsJCgkJaW50IGs9MCxjb3VudD0wLGM9MDsKCQlib29sZWFuIGZsYWc9ZmFsc2U7CgkJd2hpbGUoY291bnQ8bikKCQl7CgkJaW50IGluaXR3b3JrW109d29yazsKCQljKys7CgkJZm9yKGk9MDtpPG47aSsrKQoJCXsKCQkJZm9yKGo9MDtqPDM7aisrKQoJCQl7CgkJCQlpZighdmlzaXRlZFtpXSkKCQkJCXsKCQkJCWlmKG5lZWRbaV1bal0+d29ya1tqXSkKCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJCWlmKGo9PTMgJiYgIXZpc2l0ZWRbaV0pCgkJCXsKCQkJCWNvdW50Kys7CgkJCQl2aXNpdGVkW2ldPXRydWU7CgkJCQlzYWZlcVtrKytdPWkrMTsKCQkJCWZvcihqPTA7ajwzO2orKykKCQkJCXdvcmtbal0rPWFsbG9jW2ldW2pdOwoJCQl9CQoJCX0KCQlpZihjPT1uKQoJCXsJCgkJCWZvcihqPTA7ajwzO2orKykKCQkJewoJCQlpZih3b3JrW2pdIT1pbml0d29ya1tqXSkKCQkJYnJlYWs7CgkJCX0KCQkJaWYoaj09MykKCQkJewoJCQlmbGFnPXRydWU7CgkJCWJyZWFrOwoJCQl9CgkJfQoJCX0KCQlpZihmbGFnPT10cnVlKQoJCXsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRlYWRsb2NrLiBObyBzYWZlIHNlcXVlbmNlIGlzIHBvc3NpYmxlIik7CgkJfQoJCWVsc2UKCQl7CgkJCVN5c3RlbS5vdXQucHJpbnRsbigiU2FmZSBzZXF1ZW5jZSBpczogIik7CgkJCWZvcihpPTA7aTxuO2krKykKCQkJU3lzdGVtLm91dC5wcmludCgiUCIrc2FmZXFbaV0rIiAiKTsKCQkJU3lzdGVtLm91dC5wcmludGxuKCk7CgkJfQoJfQp9