当前位置: 首页 > 知识库问答 >
问题:

简单的C指针:如何将子节点链接到父节点

蓬森
2023-03-14

我有一个非常简单的节点结构,用于实现迭代深化DFS。然而,我后来在将子节点链接到父节点时遇到了麻烦。

struct Node
{
std::vector<int> config;
int depth;
int action; //0 up 1 down 2 left 3 right
Node * parent;
bool operator<(const Node& rhs) const
{
    return depth < rhs.depth;
}
};

后来在我的代码中,当我试图做这样的事情时,我会遇到严重的错误:

int main()
{
cout << "Welcome to IDDFS 8-puzzle solver.  Now calculating movements... \n";

//Initialize base variables
struct Node initial = {orig_config, 0, 0}; //config, depth, action, parent.
struct Node goal_node;
priority_queue<Node> frontier;
std::vector<Node> visited;
frontier.push(initial);
int Current_Max_Depth = 1;
while(frontier.size()>0)
{
struct Node Next = frontier.top();
frontier.pop();
visited.push_back(Next);
if(Next.depth < Current_Max_Depth)
{
    int pos_of_hole = Find_Position_of_Hole(Next.config);
    if(pos_of_hole==0) 
    {
    std::vector<int> Down_Child = Move_Down(Next.config);
    struct Node Down_Node = {Down_Child,Next.depth+1,1,&Next};
    if(!(std::find(visited.begin(), visited.end(), Down_Child)!=visited.end()))
    {
        if(Goal_Test(Down_Child))
        {
        goal_node = Down_Node;
        break;
        }
        frontier.push(Down_Node);
    }

    std::vector<int> Right_Child = Move_Right(Next.config);
    struct Node Right_Node = {Right_Child,Next.depth+1,3,&Next};
    if(!(std::find(visited.begin(), visited.end(), Right_Child)!=visited.end()))
    {
        if(Goal_Test(Right_Child))
        {
        goal_node = Right_Node;
        break;
        }
        frontier.push(Right_Node);
    }       
    }
}
}

我只想将这个子节点(称为Down_节点)链接到它的父节点(称为Next)。但如果Next本身不是一个节点,我该怎么做呢?

正是指向下一步的指针带来了麻烦。我试过了

编辑:当我尝试使用

在/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../..//include/c/4.4.7/算法:62,来自iddfs。cpp:8:

/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../..//包括/c/4.4.7/bits/stl_algo。h:在函数“_randomAccessIteratorstd::__find(_RandomAccessIterator,_RandomAccessIterator,const _Tp

]'iddfs.cpp:225:从这里实例化 /usr/lib/gcc/x86_64-redhat-linux/4.4.7/.. /.. /.. /../分成/c /4.4.7/bits/stl_algo.h: 174:错误:不匹配'操作符=='in'__first.__gnu_cxx::__normal_iterator

有人知道如何开始分析这个错误吗?我正在寻找行号或其他信息,从那里开始。

Edit2:结果完全不同了。C中的模板错误,对于我的节点类型,实现==。最后我把变量改成了整数向量。这是一个黑客和解决办法,但它会满足我的需要。

共有1个答案

楚修为
2023-03-14

C语言中的模板错误是所有编程中最糟糕的。话虽如此,您肯定需要通过引用传递Next,但模板错误来自其他地方。在这种情况下,似乎需要为节点类型实现操作符==。根据错误消息破译的唯一快速方法是查看它是否抱怨中的'operator=='不匹配 ,不幸的是,对于我们这些凡人来说,该错误消息的其余部分并不是真正有用的,因为错误实际上是在C标准库的内部产生的,它实际上试图在节点上使用操作符==类型,但这是一个只有非常勇敢的人才能去的地方。

 类似资料:
  • 我试图想出一个密码查询,可以返回某些父母的孩子节点,其中孩子的父母都是期望的父母。 我在这个控制台上有一个示例数据集:http://console.neo4j.org/?id=nsq8c1 在该示例中,我们有包含父节点的组节点,以及正好有2个父节点的子节点,并且所有组中的所有父节点与每个其他父节点都有一个子节点。现在我想要回父母都在第一组的孩子。 我尝试的示例查询是

  • 我正在制作一个方法,将一个节点添加到名为“publicvoidadd(int-index,T-value)”的列表中。 此方法将把一个值放入索引中,然后将有指向列表中下一个和上一个元素的指针。我把指向前面节点的指针搞砸了,我一直坐在那里进行实验,但没有让它工作。 示例:我们有一个包含整数值[2,4,6]实例变量的列表:Node head、tail;整数金额,变动; 内部类的实例变量为:T值;节点p

  • 如果我没弄错的话,树通常是一个列表,其中的元素按特定顺序排列。孩子们不在他们自己的子列表中,他们都在同一个列表中。 所以,我试图创建一个Tree类,其中包含TreeNodes(类)使用Tree类中的List。 我如何跟踪父母/孩子/叶子?如果父母“父母1”,有两个孩子“孩子A”和“孩子B”,我如何将他们联系在一起?

  • 我需要以下xslt代码方面的帮助。我的意见如下: 我的预期输出为: 我曾尝试使用*/text()获取值节点的值,但我只从第一个孩子获得文本。将来我有很多这样的子元素。 提前谢谢。 你好,Minakshi

  • 我需要将子元素复制到父元素中。 输入 期望输出 我尝试的内容(输出与输入保持相同): 我肯定会错过一些非常简单的事情。子元素与父元素具有相同的名称,这应该不是问题?

  • 我想从父节点复制到子节点。我真的不确定这是如何实现的。 我的源xml 我想得到输出为 我想要XSLT1.0中的解决方案。 我想将这些节点复制到子节点 谢谢。