下面广度优先算法怎么记录遍历的层数请提出修改意见nnint-bfsint-a-int-bnntint-cnt-=-0;ntqueueint-q;ntqpusha;ntwhileqsizentnttint-t-=-qfront;nttcnt++;nttift==bntttbreak;nttqpop;nttforint-i-=-1-;-i-=-n-;-i++nttntttifadtintttnttttqpushi;ntttnttntntreturn-cnt;n
可以在队列中存储一个pair,第一个元素存储节点编号,第二个元素存储层数。每次从队列中取出节点时,将其层数加1并存储在pair的第二个元素中。在遇到目标节点时,直接返回该节点对应的层数即可。修改后的代码如下:
int bfs(int a, int b) { int cnt = 0; queue<pair<int,int>> q; q.push(make_pair(a, 0)); while(q.size()) { int t = q.front().first; int level = q.front().second; if(t==b) return level; q.pop(); for(int i = 1 ; i <= n ; i++) { if(ad[t][i]) { q.push(make_pair(i, level+1)); } } } return -1; //未找到目标节点 }
原文地址: https://www.cveoy.top/t/topic/qC8 著作权归作者所有。请勿转载和采集!