Hi ,

 i m getting error can u find the error in code for following problem??


We will use the following (standard) definitions from graph theory. Let V be
a nonempty and finite set, its elements being called vertices (or nodes).
Let E be a subset of the Cartesian product V×V, its elements being called
edges. Then G=(V,E) is called a directed graph.

Let n be a positive integer, and let p=(e1,...,en) be a sequence of
length nof edges
ei∈ E such that ei=(vi,vi+1) for a sequence of vertices (v1,...,vn+1). Then
p is called a path from vertex v1 to vertex vn+1 in G and we say that
vn+1is reachable from
v1, writing (v1→vn+1).

Here are some new definitions. A node v in a graph G=(V,E) is called a sink,
if for every node w in G that is reachable from v, v is also reachable from
w. The bottom of a graph is the subset of all nodes that are sinks, i.e.,
bottom(G)={v∈V|∀w∈V:(v→w)⇒(w→v)}. You have to calculate the bottom of
certain graphs.
Input Specification

The input contains several test cases, each of which corresponds to a
directed graph G. Each test case starts with an integer number v, denoting
the number of vertices of G=(V,E), where the vertices will be identified by
the integer numbers in the set V={1,...,v}. You may assume that 1<=v<=5000.
That is followed by a non-negative integer e and, thereafter, e pairs of
vertex identifiers v1,w1,...,ve,we with the meaning that (vi,wi)∈E. There
are no edges other than specified by these pairs. The last test case is
followed by a zero.
Output Specification

For each test case output the bottom of the specified graph on a single
line. To this end, print the numbers of all nodes that are sinks in sorted
order separated by a single space character. If the bottom is empty, print
an empty line.

Sample Input

3 3
1 3 2 3 3 1
2 1
1 2
0

Sample Output

1 3
2






import java.io.BufferedReader;
import java.io.InputStreamReader;


public class Main {
    public int[][] matrix;
    public int n;
    public static void main(String args[]){
        try{

            BufferedReader br =  new BufferedReader(new
InputStreamReader(System.in));
            String s= br.readLine();
            while(!s.trim().equals("0"))
            {
            s= s.trim();
            String [] dim = s.split("[ ]+");
            Main graph = new Main();
            graph.n= Integer.parseInt(dim[0]);

            int edgesCount = Integer.parseInt(dim[1]);
            if(edgesCount ==0){
                for(int i=0; i<graph.n ; ++i)
                System.out.print((i+1)+" ");
                System.out.print("\n");
                s= br.readLine();
                continue;
            }

            graph.matrix = new int[graph.n][graph.n];
            for(int i=0; i<graph.n ;++i){
                for(int j=0; j<graph.n; ++j){
                    graph.matrix[i][j]=0;

                }
                }
                s= br.readLine();
                s= s.trim();
                dim = s.split("[ ]+");
                int j=0;
                while(j<dim.length){

graph.matrix[Integer.parseInt(dim[j])-1][Integer.parseInt(dim[j+1])-1] = 1;
                    j+=2;

            }
            int n = graph.n;
            int [][] temp = new int [graph.n][graph.n];
            for(int i=0 ; i<graph.n ;++i){
                copy(graph.matrix,temp,graph.n);
                graph.processGraph(temp,i);
            }
            for(int i=0; i<graph.n ;++i){
                for(j=0; j<graph.n; ++j){
                    if(graph.matrix[i][j]==1 ){
                        if(graph.matrix[j][i]==1)

                        ;
                    else
                        break;
                    }

                }
                if(j==n){

                    System.out.print((i+1) + " ");
                }

                /*else
                    System.out.println("not founf " + i);*/
            }
            System.out.print("\n");
           s= br.readLine();

        }
        }
        catch(Exception e ){
            System.out.println(e);
        }

    }

    public void processGraph(int [][] temp,int val){
        boolean tmp ;
        for(int i=0 ;i<n ;++i)
            for(int j=0; j<n ; j++){
                tmp = (temp[i][j]==1) || ((temp[i][val]==1) &&
(temp[val][j]==1));
                matrix[i][j] = tmp?1:0;

            }

    }
    public static void copy(int[][] graph , int [][] tmp , int n){
        for(int i=0 ; i<n;++i)
            for(int j=0;j<n;j++)
                tmp[i][j] = graph[i][j];

    }

}

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algoge...@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to