Bit rusty with C++ and not sure how to fix these errors i'm getting. Any help is much appreciated!!!
Here's the errors:
DFS.cpp: In function 'void DFS(Node*)':
DFS.cpp:64: error: cannot convert 'Node' to 'Node*' for argument '1' to 'void DFS_Visit(Node*)'
DFS.cpp: In function 'Node* makeGraph()':
DFS.cpp:130: error: no match for 'operator*' in '**(((Node*)(((long unsigned int)i) * 16ul)) + graph)'
DFS.cpp: In function 'Node* makeSample()':
DFS.cpp:150: error: no match for 'operator=' in '*(((Node*)(((long unsigned int)i) * 16ul)) + graph) = 0l'
DFS.cpp:15: note: candidates are: Node& Node:: operator=(const Node&)
DFS.cpp:158: error: name lookup of 'i' changed for new ISO 'for' scoping
DFS.cpp:148: error: using obsolete binding at 'i'
And here's the code:
Code:
#include <iostream>
#include <iomanip>
#include <cstdlib>
using namespace std;
int operationsCounter=0;
int ntime=0, verts, edges;
string* color = new string[1];
int* pi = new int[1];
int* d = new int[1];
int* f = new int[1];
struct Node{
int data;
Node* next;
};
void InsertAfter(Node *head, int value){
if(head==NULL){
Node* temp=NULL;
temp = new Node;
temp->data = value;
temp->next = NULL;
head = temp;
}else{
Node *temp = new Node;
temp->data = value;
temp->next = (head)->next;
(head)->next = temp;
}
}
void DFS_Visit(Node* u)
{
color[u->data]="gray";
d[u->data]=(++ntime);
int v=u->data;
while((u=u->next)!=NULL)
{
if (color[u->data]=="white")
{
pi[u->data]=v;
DFS_Visit(u);
}
}
color[v]="black";
f[v]=(++ntime);
}
void DFS(Node* G)
{
for (int u=0; u<verts; u++)
{
color[u]="white";
pi[u]=-1;
}
ntime=0;
for (int u=0; u<verts; u++)
{
if (color[u]=="white")
{
DFS_Visit(G[u]);
}
}
}
void printResults()
{
cout << " d f pi " << endl;
for (int i=0; i<verts; i++)
{
if(i<10)
cout << " " << i;
else if(i<100)
cout << " " << i;
else if(i<1000)
cout << " " << i;
else
cout << " " << i;
if(d[i]<10)
cout << " " << d[i];
else if(d[i]<100)
cout << " " << d[i];
else if(d[i]<1000)
cout << " " << d[i];
else
cout << " " << d[i];
if(f[i]<10)
cout << " " << f[i];
else if(f[i]<100)
cout << " " << f[i];
else if(f[i]<1000)
cout << " " << f[i];
else
cout << " " << f[i];
if(pi[i]<10)
cout << " " << pi[i] << endl;
else if(pi[i]<100)
cout << " " << pi[i] << endl;
else if(pi[i]<1000)
cout << " " << pi[i] << endl;
else
cout << " " << pi[i] << endl;
}
cout << endl << endl;
cout << "Number of operation: " << operationsCounter << endl;
}
bool alreadyInList(Node* llist, int data)
{
if(llist==NULL)
return false;
else if(data==llist->data)
return true;
else
return alreadyInList(llist->next, data);
}
Node* makeGraph()
{
int u, v;
u=0;
v=0;
Node* graph = new Node[5];
for(int i=0; i<5; i++)
{
&graph[i]=NULL;
InsertAfter(&graph[i], i);
}
for(int i=0; i<edges; i++)
{
while(alreadyInList(&graph[u], v))
{
u = rand() % verts;
v = rand() % verts;
}
InsertAfter(&graph[u], v);
}
return graph;
}
Node* makeSample()
{
Node* graph = new Node[5];
for(int i=0; i<verts; i++)
{
graph[i]=NULL;
InsertAfter(&graph[i], i);
}
InsertAfter(&graph[0], 1);
InsertAfter(&graph[1], 2);
InsertAfter(&graph[1], 3);
InsertAfter(&graph[2], 3);
InsertAfter(&graph[2], 4);
InsertAfter(&graph[4], i);
return graph;
}
int main()
{
int option;
while (option!=3)
{
cout << "Please select an option: " << endl;
cout << "1) Run DFS on the sample graph" << endl;
cout << "2) Run DFS on a customized random graph" << endl;
cout << "3) Exit" << endl;
cin >> option;
if(option==1)
{
verts=5;
edges=6;
color = new string[verts];
pi = new int[verts];
d = new int[verts];
f = new int[verts];
operationsCounter=0;
DFS(makeSample());
printResults();
}
if(option==2)
{
cout << "How many vertices would you like the graph to have?" << endl;
cin >> verts;
cout << "How many edges would you like the graph to have?" << endl;
cin >> edges;
color = new string[verts];
pi = new int[verts];
d = new int[verts];
f = new int[verts];
operationsCounter=0;
DFS(makeGraph());
printResults();
}
}
cout << "Thank you. Goodbye!";
return 0;
}