gpt4 book ai didi

c++ - 广度优先搜索中的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:34:36 27 4
gpt4 key购买 nike

cin>>t;

while (t--)
{

cin>>n;
cin>>m;

if (n==m)
cout<<"0\n";
else
{
//Breadth First Search Tree:
queue <gnode*> gqueue;

bft_data bft=bft_data();


list<gnode>* gp;
list<gnode>::iterator it;

gp=_gfind(graph,n);// finds list containing gnode with n value
gnode* st=gfind(gp,n),*tmp,*_st;//finds gnode with n value
_st=st;

bft.w[st->v]=0;
bft.pn[st->v]=NULL;
bft.c[st->v]=1;

gqueue.push(st);

while (!gqueue.empty())
{
st=gqueue.front();
gqueue.pop();

gp=_gfind(graph,st->v);

it=(*gp).begin();
for (++it;it!=(*gp).end();it++)//initialized with ++it to skip fist element of list
{
tmp=&(*it);
// cout<<tmp->v<<"\n";
// getchar();
if (bft.c[tmp->v]==0)
{
bft.pn[tmp->v]=st;
bft.c[tmp->v]=1;
bft.w[tmp->v]=bft.w[st->v]+1;

gqueue.push(tmp);
}
}

}


if(bft.w[m]!=SIZE)
cout<<bft.w[m]<<"\n";
else
cout<<"Impossible\n";
bft.~bft_data();
}
}

此代码片段通过构造 bfs 树来计算值为 n 和 m 的节点的 b/w 距离。但不知何故,在外部 while 循环的第一次迭代中构造的 bft 树保留其值,while 循环的进一步迭代对

这里的图是 vector<list<gnode>> 类型的

bfs 是类 bft_data 的对象:

class bft_data
{
public:
int w[SIZE],c[SIZE];
gnode* pn[SIZE];

bft_data()
{
memset(w,SIZE,SIZE);
memset(c,0,SIZE);
memset(pn,NULL,SIZE);
}

};

最佳答案

我没有查看您的第一个代码摘录,但第二个摘录可能解释了问题:memset 的第三个参数是字节数,因此您必须将它乘以数组元素的大小:

memset(w,SIZE,SIZE * sizeof(int));
memset(c,0,SIZE * sizeof(int));
memset(pn,NULL,SIZE * sizeof (gnode*));

关于c++ - 广度优先搜索中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4545239/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com