/************************************************************************************************/
/*			        LEDA Lab: 4th Lab Assignment					*/
/*			         Graphs and Topological Sort 					*/
/************************************************************************************************/

#define WhoAmI "<Give your name(s)>"		// for identification purposes		

#include <LEDA/core/graph.h> 
#include <LEDA/core/queue.h> 
#include <LEDA/core/array.h> 
#include <LEDA/core/string.h>
#include <LEDA/core/d_array.h> // for the dynamic insertion of a graph...
//#include <LEDA/basic.h>
#include <iostream> 
 
using namespace leda; 

using std::cout;
using std::cin;
using std::endl;
 
bool ISOLATED(const graph& G, node_array<bool>& isol) 
{ 
	node v;
	edge e; 
	/* provide you code here */
 
} 
 
void construct_graph(graph &G, node_array<string> &name)
{
	node v;

// ta parakato einai gia antistoixisi twn onomatvn tvn komvon pou diavazete
// me ta pragmatika onomata twn komvwn

	d_array<string,node> nametonode;
	d_array<node,string> nodetoname;

// p.x. string s; 
// read tin metavliti s; 
// v = G.new_node(); 
// nametonode[s] = v; 
// nodetoname[v] = s;


// INSERTION OF NODES...

/* provide you code here */



// INSERTION OF EDGES...

/* provide you code here */



// INSERTION OF LOGICAL NAMES... 

		name.init(G);
		forall_nodes(v,G){ name[v] = "[" + nodetoname[v] + "]"; }	


}

main() 
{ 
	int i, N; //number of nodes...
	string s;

	graph G; 

	node_array<string> name(G);
	node_array<bool> isol(G);

	node v;
	edge e;

cout << " /////////////////////////////////////////////////////////// " << endl;
cout << " LEDA LAB 2012: Lab4 \t " << WhoAmI << endl;
cout << " /////////////////////////////////////////////////////////// " << endl;


	cout << "...GIVING A GRAPH AS INPUT..." << endl; 
	if(Yes("8a dwseis diko soy grafhma [yes/no]? "))
      { 
           construct_graph(G,name); 
      }
	else 
      {
		N=9;
		array<node> A(1,N);

		for(i=1; i<=N; i++)
		{
			A[i] = G.new_node();
		}
		
		name.init(G);
           
            /* provide you code here */
	}

	G.print(cout);

      /* provide you code here */


	isol.init(G);
	bool isolategraph = ISOLATED(G, isol);

	if(isolategraph) 
      {
		cout << "THERE EXISTS AN ISOLATED VERTEX: " << endl; 
           
            /* provide you code here */
	}
	else 
           cout <<"THERE IS NO ISOLATED VERTEX IN THIS GRAPH" << endl;
} 

