实现图形,节点/类语法C ++

时间:2014-08-14 14:30:48

标签: c++ class graph

我正在阅读有关Graphs http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=graphsDataStrucs2的TopCoder教程,我正在尝试将伪代码实现为C ++。 我的问题是: 一个类与结构有什么不同?哪一个更适合处理图表?如何在C ++中将类节点传递到堆栈中?我试过这样做,但当我通过s.push(node(top.x+1, top.y));时,它说找不到匹配的功能。 但是,如果我像这样通过:

node a;
a.x=x;
a.y=y;
s.push(a);

它不会产生任何错误。 我只是想实现并编写GrafixMask问题的解决方案(上面链接中给出的伪代码)。 这是我的部分实现:

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
using namespace std;

bool fills[600][400];
class node
{
public:
int x;
int y;};
int doFill(int x, int y)
{
    int result=0;
    stack<node> s;
    node a;
    a.x=x;
    a.y=y;
    s.push(a);
    while(s.empty()==false)
{
    node top=s.top();
    s.pop();
    if(top.x < 0 || top.x>=600) continue;
    if (top.y < 0 || top.y >=400) continue;
    if(fills[top.x][top.y]) continue;
    fills[top.x][top.y]=true;
    result++;
    s.push(node(top.x+1, top.y));
    s.push(node(top.x, top. y+1));
    s.push(node(top.x, top.y-1));
    s.push(node(top.x-1, top.y));

}
return result;
}
int main()
{

for(int i=0; i < 599; i++)
    for(int j=0; j < 399; j++)
        fills[i][j]=false;

}

1 个答案:

答案 0 :(得分:2)

您的node类没有带两个整数的构造函数。如果要以这种方式构造节点,则需要:

class node
{
public:
    int x;
    int y;

    node() : x( 0 ), y( 0 ) {}
    node( int pX, int pY ) : x( pX ), y( pY ) {}
};