With your approach I have done this ...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Challenge I</title>
</head>
<body>
<?php
ini_set( 'xdebug.var_display_max_depth', 4 );
$Input1 = 2;
$Input2 = '({A,B,C},{(A,B),(B,C),(C,A)}),({A,B,C,D,E},{(A,B),(B,C),(C,A),(E,D),(D,A)}),({A,B,C,D,E,F,G,H,I,J,K,L,M},{(E,D),(D,A),(A,B),(B,C),(A,C),(C,F),(F,G),(G,H),(H,L),(G,L),(H,M),(G,I),(I,J),(J,K)})';
$Input2 = '(' . $Input2 . ')';
$Input2 = preg_replace( '/([^\(\)\{\}\[\],]+)/', '"$1"', $Input2 );
$Input2 = preg_replace( '/[\{\(]/', '[', $Input2 );
$Input2 = preg_replace( '/[\}\)]/', ']', $Input2 );
$Input2 = json_decode( $Input2, true );
//var_dump($Input2);
$finalOutputString = NULL;
$newarray = $Input2;
foreach ( $Input2 as $testcases ) {
$newarray = $testcases;
$critical_count = 1;
$outputString = NULL;
while ( $critical_count != 0 ) {
$testcases = $newarray;
$arrCriticalNodeandBridge = array( );
$critical_count = 1;
$m = 0;
foreach ( $testcases[ 0 ] as $Icelands ) {
$i = 0;
$bridgeListFromIcelandarray[ $Icelands ] = array( );
foreach ( $testcases[ 1 ] as $Bridges ) {
if ( in_array( $Icelands, $Bridges ) ) {
$bridgeListFromIcelandarray[ $Icelands ][ $i++ ] = $Bridges;
} //in_array( $Icelands, $Bridges )
} //$testcases[ 1 ] as $Bridges
$countval = count( $bridgeListFromIcelandarray[ $Icelands ] );
if ( $countval === 1 ) {
$Bridges = $bridgeListFromIcelandarray[ $Icelands ][ 0 ];
$arrCriticalNodeandBridge[ $m ][ 'node' ] = $Icelands;
$arrCriticalNodeandBridge[ $m ][ 'bridge' ] = $Bridges;
$Bridges = json_encode( $Bridges );
$Bridges = preg_replace( '/"(.*?)"/', '$1', $Bridges );
$Bridges = preg_replace( '/\[/', '(', $Bridges );
$Bridges = preg_replace( '/\]/', ')', $Bridges );
if ( $outputString === NULL )
$outputString = $Bridges;
else
$outputString = $outputString . ',' . $Bridges;
$m++;
} //$countval === 1
} //$testcases[ 0 ] as $Icelands
//var_dump( $bridgeListFromIcelandarray);
//var_dump( $arrCriticalNodeandBridge);
$critical_count = count( $arrCriticalNodeandBridge );
foreach ( $arrCriticalNodeandBridge as $v ) {
unset( $bridgeListFromIcelandarray[ $v[ 'node' ] ] );
foreach ( $testcases[ 0 ] as $k => $node ) {
if ( $node == $v[ 'node' ] ) {
unset( $testcases[ 0 ][ $k ] );
$testcases[ 0 ] = array_values( $testcases[ 0 ] );
} //$node == $v[ 'node' ]
} //$testcases[ 0 ] as $k => $node
foreach ( $testcases[ 1 ] as $k => $node ) {
if ( $node == $v[ 'bridge' ] ) {
unset( $testcases[ 1 ][ $k ] );
$testcases[ 1 ] = array_values( $testcases[ 1 ] );
} //$node == $v[ 'bridge' ]
} //$testcases[ 1 ] as $k => $node
} //$arrCriticalNodeandBridge as $v
$newarray = $testcases;
} //$critical_count != 0
//var_dump($newarray);
$checkgraph = $newarray[ 1 ];
foreach ( $checkgraph as $k => $c ) {
$newgraphsearch = $checkgraph;
$todel = $newgraphsearch[ $k ];
unset( $newgraphsearch[ $k ] );
$newgraphsearch = array_values( $newgraphsearch );
$finaldepthsearchgraph = array( );
$deletebranch = json_encode( $todel );
$number = 1;
foreach ( $bridgeListFromIcelandarray as $k => $bd ) {
$letter = $k;
$array_node = array( );
foreach ( $bd as $k => $h ) {
if ( $todel == $h ) {
unset( $bd[ $k ] );
$bd = array_values( $bd );
} //$todel == $h
} //$bd as $k => $h
foreach ( $bd as $k => $h ) {
foreach ( $h as $nodearray ) {
if ( $nodearray !== $letter ) {
array_push( $array_node, $nodearray );
} //$nodearray !== $letter
} //$h as $nodearray
} //$bd as $k => $h
$finaldepthsearchgraph[ $letter ][ 'vertex' ] = $letter;
$finaldepthsearchgraph[ $letter ][ 'visited' ] = false;
$finaldepthsearchgraph[ $letter ][ 'neighbours' ] = $array_node;
$number++;
} //$bridgeListFromIcelandarray as $k => $bd
//var_dump($finaldepthsearchgraph);
$firstnode = $newarray[ 0 ][ 0 ];
$returnvalue = breadthFirstSearch( $finaldepthsearchgraph, $firstnode );
if ( $returnvalue != count( $newarray[ 0 ] ) ) {
$deletebranch = preg_replace( '/"(.*?)"/', '$1', $deletebranch );
$deletebranch = preg_replace( '/\[/', '(', $deletebranch );
$deletebranch = preg_replace( '/\]/', ')', $deletebranch );
if ( $outputString === NULL )
$outputString = $deletebranch;
else
$outputString = $outputString . ',' . $deletebranch;
} //$returnvalue != count( $newarray[ 0 ] )
} //$checkgraph as $k => $c
if ( $outputString === NULL )
$outputString = 'NA';
$outputString = '{' . $outputString . '}';
if ( $finalOutputString === NULL )
$finalOutputString = $outputString;
else
$finalOutputString = $finalOutputString . ',' . $outputString;
} //$Input2 as $testcases
if ( count( $Input2 ) != 1 )
$finalOutputString = '{' . $finalOutputString . '}';
echo $finalOutputString;
function breadthFirstSearch( $list, $firstnode )
{
$queue = array( );
array_unshift( $queue, $list[ $firstnode ] );
$list[ $firstnode ][ 'visited' ] = true;
$str = NULL;
while ( sizeof( $queue ) ) {
$vertex = array_pop( $queue );
$str .= $vertex[ 'vertex' ];
foreach ( $vertex[ 'neighbours' ] as $neighbour ) {
if ( !$list[ $neighbour ][ 'visited' ] ) {
$list[ $neighbour ][ 'visited' ] = true;
array_unshift( $queue, $list[ $neighbour ] );
} //!$list[ $neighbour ][ 'visited' ]
} //$vertex[ 'neighbours' ] as $neighbour
} //sizeof( $queue )
return strlen( $str );
}
?>
</body>
</html>