bfs求助,已经知道哪里错了但是改不出来
查看原帖
bfs求助,已经知道哪里错了但是改不出来
828573
CurryNo_1楼主2023/1/7 16:46
#include<iostream>
#include<queue>
using namespace std;
int n,num,leftc,rightc,ans=100000000;
struct city{
	int pe;
	int l;
	int r;
	int parent;
	int data;
	int step;
};
city node[110];
int bfs(int aim)
{
	int mark[110]={};//mark[i]数组标记i号地点是否被访问过,0代表该地点位被访问,1代表该地点被访问过 
	int sum=0; 
	queue<city>q;
	mark[aim]=1;
	q.push(node[aim]);//医院编号入列
	while(!q.empty())
	{
		city tmp=q.front();
		if(tmp.l && !mark[tmp.l])//该节点存在左子节点且左子节点未被访问过 
		{
			q.push(node[tmp.l]);//该节点的左子节点入列
			node[tmp.l].step=tmp.step+1;
			sum+=node[tmp.l].pe*node[tmp.l].step;
		}
		if(tmp.r && !mark[tmp.r])//该节点存在右子节点且右子节点未被访问过 
		{
			q.push(node[tmp.r]);//该节点的右子节点入列
			node[tmp.r].step=tmp.step+1;
			sum+=node[tmp.r].pe*node[tmp.r].step;
		}
		if(tmp.parent && !mark[tmp.parent])//该节点存在父节点且父节点未被访问过 
		{
			q.push(node[tmp.parent]);//该节点的父节点入列
			node[tmp.parent].step=tmp.step+1;
			sum+=node[tmp.parent].pe*node[tmp.parent].step;
		}
		cout << tmp.data << " ";  
		mark[tmp.data]=1;//标记该节点已被访问 
		q.pop();//队首拓展结束出列 
	}
	return sum; 
}
int main()
{
	cin >> n;
	for(int i=1;i<=n;i++)
	{
		cin >> num >> leftc >> rightc;
		node[i].pe=num;
		node[i].l=leftc;
		node[i].r=rightc;
		node[rightc].parent=i;
		node[leftc].parent=i;
		node[i].data=i;
	}
	for(int i=1;i<=n;i++)  
	{
		for(int i=1;i<=n;i++)  node[i].step=0;//步长清零
	    ans=min(ans,bfs(i));
	}
	cout << ans;
} 

每个节点的step都为1,第n轮拓展结束后的节点的step应该为n但是结果全都是1

2023/1/7 16:46
加载中...