SlideShare a Scribd company logo
How would you implement a node classs and an edge class to create a undirected and a directed
graph using c++
Please provide a default constructor, copy constructor, accessing functions , and destructor for
each of the classes to print out a graph
( node, edge , directed ,undirected )
V={1,3,3,4,5,6}
E={(1,2),(1,4),(2,3),(2,4),(2,5),(3,4),(5,3),(6,3),(6,5)}
How would you implement a node classs and an edge class to create a undirected and a directed
graph using c++
Please provide a default constructor, copy constructor, accessing functions , and destructor for
each of the classes to print out a graph
( node, edge , directed ,undirected )
V={1,3,3,4,5,6}
E={(1,2),(1,4),(2,3),(2,4),(2,5),(3,4),(5,3),(6,3),(6,5)}
Please provide a default constructor, copy constructor, accessing functions , and destructor for
each of the classes to print out a graph
( node, edge , directed ,undirected )
V={1,3,3,4,5,6}
E={(1,2),(1,4),(2,3),(2,4),(2,5),(3,4),(5,3),(6,3),(6,5)}
Solution
#include
#include
#include
#include
#include
using namespace std;
class Graph;
class Edge;
class Vertex;
class Edge {
int weight;
Vertex * vertex1;
Vertex * vertex2;
public:
int getWeight() const {return weight;}
Vertex* getV1() const {return vertex1;}
Vertex* getV2() const {return vertex2;}
void setWeight(int w){weight=w;}
void setV1(Vertex * v){vertex1=v;}
void setV2(Vertex * v){vertex2=v;}
Edge(int w, Vertex* v1, Vertex* v2){weight=w;vertex1=v1;vertex2=v2;}
};
class Vertex {
string label;
vector edgesLeavingMe;
bool visited;
public:
string getLabel() const {return label;}
vector getEdges()const{return edgesLeavingMe;}
Edge * getEdgeTo(string d){
for (vector::iterator it = edgesLeavingMe.begin(); it != edgesLeavingMe.end(); ++it){
if ((*it)->getV2()->getLabel()==d){
return (*it);
}
}
return 0;
}
void setVisited(bool v){visited=v;}
bool getVisited() {return visited;}
void addEdge(Edge * e){edgesLeavingMe.push_back(e);}
void removeEdge(Edge *
e){edgesLeavingMe.erase(remove(edgesLeavingMe.begin(),edgesLeavingMe.end(),e),edgesLea
vingMe.end());}
void removeEdgeTo(string l){
Edge * e = getEdgeTo(l);
removeEdge(e);
}
Vertex(string l){label=l; visited=false;}
};
class Graph {
vector edges;
map vertices;
public:
Vertex * addVertex(string label){
Vertex * v = new Vertex(label);
vertices[label]=v;
return v;
}
Edge * addEdge(int w, string from, string to);
void removeEdge(string from, string to);
Vertex * getVertexWithlabel(string l);
void removeVertex(string l);
};
class UnDirectedGraph {
vector edges;
map vertices;
public:
Vertex * addVertex(string label){
Vertex * v = new Vertex(label);
vertices[label]=v;
return v;
}
map getVertices(){return vertices;}
vector getEdges(){return edges;}
Edge * addEdge(int w, string from, string to){
if (vertices.find(from) != vertices.end() && vertices.find(to) != vertices.end()){
Vertex * vfrom = vertices.find(from)->second;
Vertex * vto = vertices.find(to)->second;
Edge * e = new Edge(w,vfrom,vto);
(*vfrom).addEdge(e);
(*vto).addEdge(e);
edges.push_back(e);
return e;
}
else{
//needt o handle case where vertices did not exist.
return 0;
}
}
Edge * getEdge(string from, string to){
if (vertices.find(from) != vertices.end() && vertices.find(to) != vertices.end()){
Vertex * v1 = vertices.find(from)->second;
Vertex* v2 = vertices.find(to)->second;
Edge * e = (*v1).getEdgeTo(to);
return e;
}
else {
//need to handle case where vertices did not exist.
return 0;
}
}
void removeEdge(string from, string to){
Edge * e = getEdge(from,to);
if (e != 0){
edges.erase(remove(edges.begin(),edges.end(),e),edges.end());
(*e).getV1()->removeEdge(e);
(*e).getV2()->removeEdge(e);
}
//handle case where edge did not exist?
}
Vertex * getVertexWithLabel(string l){
if (vertices.find(l) != vertices.end())
return vertices.find(l)->second;
else
return 0;
}
void removeVertex(string l){
Vertex * v = getVertexWithLabel(l);
if (v != 0){
vector edges = getVertexWithLabel(l)->getEdges();
for (vector::iterator it = edges.begin(); it != edges.end(); ++it){
string from = (*it)->getV1()->getLabel();
string to = (*it)->getV2()->getLabel();
removeEdge(from,to);
}
vertices.erase(l);
}
else {
//Need to handle case where vertex does not exist.
}
}
vector whereCanIGo(Vertex * v)
{
vector destinations;
vector edges = v->getEdges();
for (vector::const_iterator it = edges.begin(); it != edges.end(); ++it) {
if ((*it)->getV1() != v){
destinations.push_back((*it)->getV1());
}
if ((*it)->getV2() !=v) {
destinations.push_back((*it)->getV2());
}
}
destinations.push_back(v);
return destinations;
}
};
class DirectedGraph {
vector edges;
map vertices;
public:
Vertex * addVertex(string label){
Vertex * v = new Vertex(label);
vertices[label]=v;
return v;
}
map getVertices(){return vertices;}
vector getEdges(){return edges;}
Edge * addEdge(int w, string from, string to){
if (vertices.find(from) != vertices.end() && vertices.find(to) != vertices.end()){
Vertex * vfrom = vertices.find(from)->second;
Vertex * vto = vertices.find(to)->second;
Edge * e = new Edge(w,vfrom,vto);
(*vfrom).addEdge(e);
edges.push_back(e);
return e;
}
else{
//handle case where vertcies did not exist.
return 0;
}
}
Edge * getEdge(string from, string to){
if (vertices.find(from) != vertices.end() && vertices.find(to) != vertices.end()){
Vertex * v1 = vertices.find(from)->second;
Vertex* v2 = vertices.find(to)->second;
Edge * e = (*v1).getEdgeTo(to);
return e;
}
else {
return 0;
}
}
void removeEdge(string from, string to){
Edge * e = getEdge(from,to);
if (e != 0){
edges.erase(remove(edges.begin(),edges.end(),e),edges.end());
(*e).getV1()->removeEdge(e);
}
}
Vertex * getVertexWithLabel(string l){
if (vertices.find(l) != vertices.end())
return vertices.find(l)->second;
else
return 0;
}
void removeVertex(string l){
Vertex * v = getVertexWithLabel(l);
if (v != 0){
vector edges = getVertexWithLabel(l)->getEdges();
for (vector::iterator it = edges.begin(); it != edges.end(); ++it){
string from = (*it)->getV1()->getLabel();
string to = (*it)->getV2()->getLabel();
removeEdge(from,to);
}
vertices.erase(l);
}
else {
//handle case where vertex did not exist.
}
}
vector whereCanIGo(Vertex * v)
{
vector destinations;
vector edges = v->getEdges();
for (vector::const_iterator it = edges.begin(); it != edges.end(); ++it) {
if ((*it)->getV2() !=v) {
destinations.push_back((*it)->getV2());
}
}
destinations.push_back(v);
return destinations;
}
};
template
void printGraph(T * t){
map vertices = t->getVertices();
for (map::iterator it = vertices.begin(); it != vertices.end(); ++it){
cout << it->first <<": ";
vector edges = it->second->getEdges();
for (vector::iterator jit = edges.begin(); jit != edges.end(); ++jit){
string l1 = (*jit)->getV1()->getLabel();
string l2=(*jit)->getV2()->getLabel();
if (l1 != it->first){cout << l1 << ", ";}
if (l2 != it->first){cout << l2 << ", ";}
}
cout << endl;
}
}
template
bool isPath(T * t, string from, string to)
{
Vertex * vfrom = t->getVertexWithLabel(from);
Vertex * vto = t->getVertexWithLabel(to);
if (vfrom == 0 || vto == 0) {
return false;
}
if (from==to) {
return true;
}
T g = *t;
map vertices = t->getVertices();
vector edges = t->getEdges();
vector verticesToCheck;
verticesToCheck.push_back(vfrom);
vertices.erase(from);
while (verticesToCheck.size() != 0){
vector destinations = t->whereCanIGo(verticesToCheck[0]);
verticesToCheck.erase(verticesToCheck.begin());
for (vector::const_iterator it = destinations.begin(); it != destinations.end(); ++it) {
//
if (vertices.find((*it)->getLabel()) != vertices.end()) {
if ((*it)->getLabel()==to) {
return true;
}
verticesToCheck.push_back((*it));
vertices.erase((*it)->getLabel());
}
}
}
return false;
}
int main(){
UnDirectedGraph g;
g.addVertex("v1");
g.addVertex("v2");
g.addVertex("v3");
g.addEdge(1,"v1","v2");
g.addEdge(1,"v2","v3");
cout << isPath(&g,"v1","v3");
cout << isPath(&g, "v2","v3");
cout << isPath(&g,"v3","v2");
cout << isPath(&g,"v3","v1");
cout << isPath(&g,"v3","v3");
}

More Related Content

DOCX
Write a program that reads a graph from a file anil determines whethe.docx
PDF
Please finish the codes in Graph.h class.#################### Vert.pdf
PPTX
kjugyfdtryuytrdtfyugtfdxghjgfdial algorithm.pptx
PPTX
Internet Download Manager Crack Patch Latest IDM Free
KEY
openFrameworks 007 - 3D
PPTX
Topological sort
PDF
Create a java project that - Draw a circle with three random init.pdf
PPT
Chap 6 Graph.ppt
Write a program that reads a graph from a file anil determines whethe.docx
Please finish the codes in Graph.h class.#################### Vert.pdf
kjugyfdtryuytrdtfyugtfdxghjgfdial algorithm.pptx
Internet Download Manager Crack Patch Latest IDM Free
openFrameworks 007 - 3D
Topological sort
Create a java project that - Draw a circle with three random init.pdf
Chap 6 Graph.ppt

Similar to How would you implement a node classs and an edge class to create .pdf (20)

PDF
Magicness in Extended Duplicate Graphs
PPTX
topologicalsort-using c++ as development language.pptx
PPT
Graphs.ppt
PPT
Graphs.ppt of mathemaics we have to clar all doubts
PDF
How to extend map? Or why we need collections redesign? - Scalar 2017
DOCX
Write a program that reads a connected graph from a file and displays.docx
PDF
Extended network and algorithm finding maximal flows
PPT
PDF
Dynamic Semantics Specification and Interpreter Generation
PDF
Graph in Data Structure
PPTX
All pair shortest path by Sania Nisar
PPTX
Data Structures and Agorithm: DS 21 Graph Theory.pptx
PDF
ECMAScript 6 major changes
PDF
Complete the implementation of the Weighted Graph that we began in t.pdf
PDF
Im looking for coding help I dont really need this to be explained.pdf
PPTX
Super Advanced Python –act1
DOCX
2Part I1. Answer questions for the following graph, if .docx
PDF
ECMAScript 6 and beyond
PPT
Graphs.pptGraphs.pptGraphs.pptGraphs.pptGraphs.pptGraphs.ppt
Magicness in Extended Duplicate Graphs
topologicalsort-using c++ as development language.pptx
Graphs.ppt
Graphs.ppt of mathemaics we have to clar all doubts
How to extend map? Or why we need collections redesign? - Scalar 2017
Write a program that reads a connected graph from a file and displays.docx
Extended network and algorithm finding maximal flows
Dynamic Semantics Specification and Interpreter Generation
Graph in Data Structure
All pair shortest path by Sania Nisar
Data Structures and Agorithm: DS 21 Graph Theory.pptx
ECMAScript 6 major changes
Complete the implementation of the Weighted Graph that we began in t.pdf
Im looking for coding help I dont really need this to be explained.pdf
Super Advanced Python –act1
2Part I1. Answer questions for the following graph, if .docx
ECMAScript 6 and beyond
Graphs.pptGraphs.pptGraphs.pptGraphs.pptGraphs.pptGraphs.ppt
Ad

More from info309708 (20)

PDF
Pluto has been hard to measure from Earth because of its atmosphere. .pdf
PDF
Loops and ArraysObjectivesArrays are a series of elements consi.pdf
PDF
Modern Database Management 11th Edition by Jeffrey A. HofferUse th.pdf
PDF
Let f X Y be a function.True or FalseA sufficient condition for f .pdf
PDF
Its your third week on the job at Panache Inc. Last week, you made.pdf
PDF
In JAVA Write a program that uses a two-dimensional array to sto.pdf
PDF
How do CCMI model help with the improvements and comparison of the p.pdf
PDF
How do you evaluate your own global mind set levelsSolutionAN.pdf
PDF
Here are two datasetsDataset A 64 65 66 68 70 71 72Dataset B .pdf
PDF
Getting StartedCreate a class called Lab8. Use the same setup for .pdf
PDF
For this homework, you will develop a class called VendingMachine th.pdf
PDF
Discuss what is SSH and the advantages and disadvantages of using it.pdf
PDF
Describe the differences between the three major physical connection .pdf
PDF
Create a student record management system using linked list and queu.pdf
PDF
Coca-Cola companyStrategic Goals and Objectivesi. Objectives are.pdf
PDF
C programming. Answer question only in C code Ninth Deletion with B.pdf
PDF
Biology LabThe poisonous wastes of diptheria germs are called (A).pdf
PDF
Aside from the expansion of industrial capitalism, what factors affe.pdf
PDF
Yates (2009) notes that unions have a purpose broader than serving t.pdf
PDF
write a C program for blinking light using function make sure it.pdf
Pluto has been hard to measure from Earth because of its atmosphere. .pdf
Loops and ArraysObjectivesArrays are a series of elements consi.pdf
Modern Database Management 11th Edition by Jeffrey A. HofferUse th.pdf
Let f X Y be a function.True or FalseA sufficient condition for f .pdf
Its your third week on the job at Panache Inc. Last week, you made.pdf
In JAVA Write a program that uses a two-dimensional array to sto.pdf
How do CCMI model help with the improvements and comparison of the p.pdf
How do you evaluate your own global mind set levelsSolutionAN.pdf
Here are two datasetsDataset A 64 65 66 68 70 71 72Dataset B .pdf
Getting StartedCreate a class called Lab8. Use the same setup for .pdf
For this homework, you will develop a class called VendingMachine th.pdf
Discuss what is SSH and the advantages and disadvantages of using it.pdf
Describe the differences between the three major physical connection .pdf
Create a student record management system using linked list and queu.pdf
Coca-Cola companyStrategic Goals and Objectivesi. Objectives are.pdf
C programming. Answer question only in C code Ninth Deletion with B.pdf
Biology LabThe poisonous wastes of diptheria germs are called (A).pdf
Aside from the expansion of industrial capitalism, what factors affe.pdf
Yates (2009) notes that unions have a purpose broader than serving t.pdf
write a C program for blinking light using function make sure it.pdf
Ad

Recently uploaded (20)

PDF
Classroom Observation Tools for Teachers
PPTX
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
PDF
102 student loan defaulters named and shamed – Is someone you know on the list?
PDF
Microbial disease of the cardiovascular and lymphatic systems
PDF
2.FourierTransform-ShortQuestionswithAnswers.pdf
PPTX
Cell Structure & Organelles in detailed.
PPTX
202450812 BayCHI UCSC-SV 20250812 v17.pptx
PDF
A systematic review of self-coping strategies used by university students to ...
PPTX
Tissue processing ( HISTOPATHOLOGICAL TECHNIQUE
PDF
Chinmaya Tiranga quiz Grand Finale.pdf
PPTX
Pharmacology of Heart Failure /Pharmacotherapy of CHF
PDF
01-Introduction-to-Information-Management.pdf
PDF
Computing-Curriculum for Schools in Ghana
PDF
VCE English Exam - Section C Student Revision Booklet
PPTX
Final Presentation General Medicine 03-08-2024.pptx
PDF
Supply Chain Operations Speaking Notes -ICLT Program
PDF
Chapter 2 Heredity, Prenatal Development, and Birth.pdf
PDF
Complications of Minimal Access Surgery at WLH
PPTX
Microbial diseases, their pathogenesis and prophylaxis
PPTX
Pharma ospi slides which help in ospi learning
Classroom Observation Tools for Teachers
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
102 student loan defaulters named and shamed – Is someone you know on the list?
Microbial disease of the cardiovascular and lymphatic systems
2.FourierTransform-ShortQuestionswithAnswers.pdf
Cell Structure & Organelles in detailed.
202450812 BayCHI UCSC-SV 20250812 v17.pptx
A systematic review of self-coping strategies used by university students to ...
Tissue processing ( HISTOPATHOLOGICAL TECHNIQUE
Chinmaya Tiranga quiz Grand Finale.pdf
Pharmacology of Heart Failure /Pharmacotherapy of CHF
01-Introduction-to-Information-Management.pdf
Computing-Curriculum for Schools in Ghana
VCE English Exam - Section C Student Revision Booklet
Final Presentation General Medicine 03-08-2024.pptx
Supply Chain Operations Speaking Notes -ICLT Program
Chapter 2 Heredity, Prenatal Development, and Birth.pdf
Complications of Minimal Access Surgery at WLH
Microbial diseases, their pathogenesis and prophylaxis
Pharma ospi slides which help in ospi learning

How would you implement a node classs and an edge class to create .pdf

  • 1. How would you implement a node classs and an edge class to create a undirected and a directed graph using c++ Please provide a default constructor, copy constructor, accessing functions , and destructor for each of the classes to print out a graph ( node, edge , directed ,undirected ) V={1,3,3,4,5,6} E={(1,2),(1,4),(2,3),(2,4),(2,5),(3,4),(5,3),(6,3),(6,5)} How would you implement a node classs and an edge class to create a undirected and a directed graph using c++ Please provide a default constructor, copy constructor, accessing functions , and destructor for each of the classes to print out a graph ( node, edge , directed ,undirected ) V={1,3,3,4,5,6} E={(1,2),(1,4),(2,3),(2,4),(2,5),(3,4),(5,3),(6,3),(6,5)} Please provide a default constructor, copy constructor, accessing functions , and destructor for each of the classes to print out a graph
  • 2. ( node, edge , directed ,undirected ) V={1,3,3,4,5,6} E={(1,2),(1,4),(2,3),(2,4),(2,5),(3,4),(5,3),(6,3),(6,5)} Solution #include #include #include #include #include using namespace std; class Graph; class Edge; class Vertex; class Edge { int weight; Vertex * vertex1; Vertex * vertex2; public: int getWeight() const {return weight;} Vertex* getV1() const {return vertex1;} Vertex* getV2() const {return vertex2;} void setWeight(int w){weight=w;} void setV1(Vertex * v){vertex1=v;} void setV2(Vertex * v){vertex2=v;} Edge(int w, Vertex* v1, Vertex* v2){weight=w;vertex1=v1;vertex2=v2;} }; class Vertex { string label;
  • 3. vector edgesLeavingMe; bool visited; public: string getLabel() const {return label;} vector getEdges()const{return edgesLeavingMe;} Edge * getEdgeTo(string d){ for (vector::iterator it = edgesLeavingMe.begin(); it != edgesLeavingMe.end(); ++it){ if ((*it)->getV2()->getLabel()==d){ return (*it); } } return 0; } void setVisited(bool v){visited=v;} bool getVisited() {return visited;} void addEdge(Edge * e){edgesLeavingMe.push_back(e);} void removeEdge(Edge * e){edgesLeavingMe.erase(remove(edgesLeavingMe.begin(),edgesLeavingMe.end(),e),edgesLea vingMe.end());} void removeEdgeTo(string l){ Edge * e = getEdgeTo(l); removeEdge(e); } Vertex(string l){label=l; visited=false;} }; class Graph { vector edges; map vertices; public: Vertex * addVertex(string label){ Vertex * v = new Vertex(label); vertices[label]=v; return v; } Edge * addEdge(int w, string from, string to); void removeEdge(string from, string to);
  • 4. Vertex * getVertexWithlabel(string l); void removeVertex(string l); }; class UnDirectedGraph { vector edges; map vertices; public: Vertex * addVertex(string label){ Vertex * v = new Vertex(label); vertices[label]=v; return v; } map getVertices(){return vertices;} vector getEdges(){return edges;} Edge * addEdge(int w, string from, string to){ if (vertices.find(from) != vertices.end() && vertices.find(to) != vertices.end()){ Vertex * vfrom = vertices.find(from)->second; Vertex * vto = vertices.find(to)->second; Edge * e = new Edge(w,vfrom,vto); (*vfrom).addEdge(e); (*vto).addEdge(e); edges.push_back(e); return e; } else{ //needt o handle case where vertices did not exist. return 0; } } Edge * getEdge(string from, string to){ if (vertices.find(from) != vertices.end() && vertices.find(to) != vertices.end()){ Vertex * v1 = vertices.find(from)->second; Vertex* v2 = vertices.find(to)->second; Edge * e = (*v1).getEdgeTo(to); return e; }
  • 5. else { //need to handle case where vertices did not exist. return 0; } } void removeEdge(string from, string to){ Edge * e = getEdge(from,to); if (e != 0){ edges.erase(remove(edges.begin(),edges.end(),e),edges.end()); (*e).getV1()->removeEdge(e); (*e).getV2()->removeEdge(e); } //handle case where edge did not exist? } Vertex * getVertexWithLabel(string l){ if (vertices.find(l) != vertices.end()) return vertices.find(l)->second; else return 0; } void removeVertex(string l){ Vertex * v = getVertexWithLabel(l); if (v != 0){ vector edges = getVertexWithLabel(l)->getEdges(); for (vector::iterator it = edges.begin(); it != edges.end(); ++it){ string from = (*it)->getV1()->getLabel(); string to = (*it)->getV2()->getLabel(); removeEdge(from,to); } vertices.erase(l); } else { //Need to handle case where vertex does not exist. } } vector whereCanIGo(Vertex * v)
  • 6. { vector destinations; vector edges = v->getEdges(); for (vector::const_iterator it = edges.begin(); it != edges.end(); ++it) { if ((*it)->getV1() != v){ destinations.push_back((*it)->getV1()); } if ((*it)->getV2() !=v) { destinations.push_back((*it)->getV2()); } } destinations.push_back(v); return destinations; } }; class DirectedGraph { vector edges; map vertices; public: Vertex * addVertex(string label){ Vertex * v = new Vertex(label); vertices[label]=v; return v; } map getVertices(){return vertices;} vector getEdges(){return edges;} Edge * addEdge(int w, string from, string to){ if (vertices.find(from) != vertices.end() && vertices.find(to) != vertices.end()){ Vertex * vfrom = vertices.find(from)->second; Vertex * vto = vertices.find(to)->second; Edge * e = new Edge(w,vfrom,vto); (*vfrom).addEdge(e); edges.push_back(e); return e; } else{
  • 7. //handle case where vertcies did not exist. return 0; } } Edge * getEdge(string from, string to){ if (vertices.find(from) != vertices.end() && vertices.find(to) != vertices.end()){ Vertex * v1 = vertices.find(from)->second; Vertex* v2 = vertices.find(to)->second; Edge * e = (*v1).getEdgeTo(to); return e; } else { return 0; } } void removeEdge(string from, string to){ Edge * e = getEdge(from,to); if (e != 0){ edges.erase(remove(edges.begin(),edges.end(),e),edges.end()); (*e).getV1()->removeEdge(e); } } Vertex * getVertexWithLabel(string l){ if (vertices.find(l) != vertices.end()) return vertices.find(l)->second; else return 0; } void removeVertex(string l){ Vertex * v = getVertexWithLabel(l); if (v != 0){ vector edges = getVertexWithLabel(l)->getEdges(); for (vector::iterator it = edges.begin(); it != edges.end(); ++it){ string from = (*it)->getV1()->getLabel(); string to = (*it)->getV2()->getLabel(); removeEdge(from,to);
  • 8. } vertices.erase(l); } else { //handle case where vertex did not exist. } } vector whereCanIGo(Vertex * v) { vector destinations; vector edges = v->getEdges(); for (vector::const_iterator it = edges.begin(); it != edges.end(); ++it) { if ((*it)->getV2() !=v) { destinations.push_back((*it)->getV2()); } } destinations.push_back(v); return destinations; } }; template void printGraph(T * t){ map vertices = t->getVertices(); for (map::iterator it = vertices.begin(); it != vertices.end(); ++it){ cout << it->first <<": "; vector edges = it->second->getEdges(); for (vector::iterator jit = edges.begin(); jit != edges.end(); ++jit){ string l1 = (*jit)->getV1()->getLabel(); string l2=(*jit)->getV2()->getLabel(); if (l1 != it->first){cout << l1 << ", ";} if (l2 != it->first){cout << l2 << ", ";} } cout << endl; } } template
  • 9. bool isPath(T * t, string from, string to) { Vertex * vfrom = t->getVertexWithLabel(from); Vertex * vto = t->getVertexWithLabel(to); if (vfrom == 0 || vto == 0) { return false; } if (from==to) { return true; } T g = *t; map vertices = t->getVertices(); vector edges = t->getEdges(); vector verticesToCheck; verticesToCheck.push_back(vfrom); vertices.erase(from); while (verticesToCheck.size() != 0){ vector destinations = t->whereCanIGo(verticesToCheck[0]); verticesToCheck.erase(verticesToCheck.begin()); for (vector::const_iterator it = destinations.begin(); it != destinations.end(); ++it) { // if (vertices.find((*it)->getLabel()) != vertices.end()) { if ((*it)->getLabel()==to) { return true; } verticesToCheck.push_back((*it)); vertices.erase((*it)->getLabel()); } } } return false; } int main(){ UnDirectedGraph g; g.addVertex("v1"); g.addVertex("v2");
  • 10. g.addVertex("v3"); g.addEdge(1,"v1","v2"); g.addEdge(1,"v2","v3"); cout << isPath(&g,"v1","v3"); cout << isPath(&g, "v2","v3"); cout << isPath(&g,"v3","v2"); cout << isPath(&g,"v3","v1"); cout << isPath(&g,"v3","v3"); }