我有这样的结构:
struct node {
int state[9];
};
typedef struct node Node;
在我的代码的开头,我用一些状态初始化它。 然后,我根据ZERO位置为此状态生成可能的超级用户,例如:
case(7):
printf("Before generating sucessor 2:\n");
for(i=0;i<9;i++) printf("%d,", n->state[i])
suc2->state[7] = n->state[6];
suc2->state[6] = 0;
printf("After generating sucessor 2:\n");
for(i=0;i<9;i++) printf("%d,", n->state[i])
break;
上面的案例是一个生成可能的过继状态的函数。并且&#34; n&#34;是我收到的节点:expand(Node * n);
我的问题是:在我生成sucessor 2之后,n状态是不同的。我不明白为什么,因为我只改变了继承者2状态。
导致这种情况的原因是什么?
答案 0 :(得分:3)
如果您修改suc2->state[6]
时n->state[6]
的值更改为相同的值,则n
指向与suc2
相同的节点。
如果您的数据结构具有从其第一个继承者返回节点的链接,则这是可能的,因此遍历两个级别实际上会将您带回到您已经开始的位置。
如果您知道您的算法不应该发生这种情况,请在代码中添加一个断言:
assert(suc2 != n);
由于算法中存在错误,这将在发生此问题时停止执行程序。