我用C ++创建了一个贪婪的着色程序。运行此代码时,我收到错误消息:在第39行代码“ int result [V];”上未定义标识符V。我在第46行上有相同的变量'bool available [V];'但我在那里没有错误。我认为这与我使用的向量有关,但我不确定。任何帮助将不胜感激。
#include "stdafx.h"
#include <iostream>
#include <list>
#include <vector>
using namespace std;
class Graph
{
vector<list<int>> adj;
public:
Graph(int V);
~Graph(){}
void addEdge(int v, int w);
void greedyColoring(vector<bool>& available);
};
Graph::Graph(int V)
{
adj.resize(V);
}
void Graph::addEdge(int v, int w)
{
adj[v].push_back(w);
adj[w].push_back(v);
}
void Graph::greedyColoring(vector<bool>& available)
{
int result[V];
result[0] = 0;
for (int u = 1; u < V; u++)
result[u] = -1;
bool available[V];
for (int cr = 0; cr < V; cr++)
available[cr] = false;
for (int u = 1; u < V; u++)
{
list<int>::iterator i;
for (i = adj[u].begin(); i != adj[u].end(); ++i)
if (result[*i] != -1)
available[result[*i]] = true;
int cr;
for (cr = 0; cr < V; cr++)
if (available[cr] == false)
break;
result[u] = cr;
for (i = adj[u].begin(); i != adj[u].end(); ++i)
if (result[*i] != -1)
available[result[*i]] = false;
}
for (int u = 0; u < V; u++)
cout << "Vertex " << u << " ---> Color"
<< result[u] << endl;
}
int main()
{
Graph g(6);
g.addEdge(0, 1);
g.addEdge(0, 4);
g.addEdge(0, 5);
g.addEdge(1, 3);
g.addEdge(1, 4);
g.addEdge(2, 3);
g.addEdge(2, 4);
g.addEdge(4, 5);
cout << "Coloring of the graph \n";
g.greedyColoring();
return 0;
}
答案 0 :(得分:0)
V
的数据成员,因此当您引用时
稍后在您的方法中V
,则没有这样的数据成员
现有。在您的课程中声明一个类型为int
的数据成员。greedyColoring()
,因为您在
同样的方法。如果您不删除该参数,
那么您将有一个名为available
的参数 shadowing
自动变量名为available
。但是我想你是这样做的
您将努力解决与available
有关的错误。V
,但可以改用std::vector
,并且
将其调整为int
result[V];
的大小,然后使用V
运算符,或者
随手推回元素(例如,在for循环中)。将所有内容放在一起,您将得到:
[]
输出:
#include <iostream>
#include <list>
#include <vector>
using namespace std;
class Graph
{
int V;
vector<list<int>> adj;
public:
Graph(int V);
~Graph(){}
void addEdge(int v, int w);
void greedyColoring(void);
};
Graph::Graph(int V) : V(V)
{
adj.resize(V);
}
void Graph::addEdge(int v, int w)
{
adj[v].push_back(w);
adj[w].push_back(v);
}
void Graph::greedyColoring(void)
{
vector<int> result;
result.push_back(0);;
for (int u = 1; u < V; u++)
result.push_back(-1);
vector<bool> available;
for (int cr = 0; cr < V; cr++)
available.push_back(false);
for (int u = 1; u < V; u++)
{
list<int>::iterator i;
for (i = adj[u].begin(); i != adj[u].end(); ++i)
if (result[*i] != -1)
available[result[*i]] = true;
int cr;
for (cr = 0; cr < V; cr++)
if (available[cr] == false)
break;
result[u] = cr;
for (i = adj[u].begin(); i != adj[u].end(); ++i)
if (result[*i] != -1)
available[result[*i]] = false;
}
for (int u = 0; u < V; u++)
cout << "Vertex " << u << " ---> Color"
<< result[u] << endl;
}
int main()
{
Graph g(6);
g.addEdge(0, 1);
g.addEdge(0, 4);
g.addEdge(0, 5);
g.addEdge(1, 3);
g.addEdge(1, 4);
g.addEdge(2, 3);
g.addEdge(2, 4);
g.addEdge(4, 5);
cout << "Coloring of the graph \n";
g.greedyColoring();
return 0;
}