C语言实现图的广度优先搜索遍历算法

非递归的...... 非递归的... 展开
 我来答
水牧兮
2012-06-05 · TA获得超过385个赞
知道小有建树答主
回答量:142
采纳率:0%
帮助的人:78.6万
展开全部
先写个大题思路,楼主先自己想想,想不出来的话,2天后给代码。

queue<node> q;
q.push(start);
bool canVisit[][];
node cur;
while(!q.empty()){
cur = q.top();
q.pop();
foreach(node is connected by cur){
if(canVisit[node.x][node.y])
{
printf("访问结点(%d,%d)",node.x,node.y);
canVisit[node.x][node.y]=false;
q.push(node);
}
}
}
追问
同学,我急用的,两天后就不需要了...,谢啦...
追答
#include
#include
#include
#include

using std::queue;//队列懒得自己写了,C++之,楼主有兴趣可以自己实现

#define MN 10000
#define ME 100000
/*链式前向星*/
int n,e;//结点数,边数
int box[MN];
struct
{
int pre;//前向对应的edge数组下标
int to;//对应要去的结点
}edge[ME];
int len;
void iniPreLinkList()
{
memset(box,-1,sizeof(box));
len=0;
}
void addDirectedEdge(int from,int to)
{
edge[len].to = to;
edge[len].pre = box[from];
box[from] = len;
len++;
}
void printList()
{
int address;
int i;
for(i=0;i%d",edge[address].to);
}
printf("\n");
}
}
/*链式前向星*/
int canVisit[MN];
void visit(int address)//访问结点,可根据情况,修改box结点域的结构
{
printf("访问结点%d\n",edge[address].to);
}
void bfs(int start)
{
memset(canVisit,1,sizeof(canVisit));
queue q;
q.push(start);
int cur;
int address;
printf("开始宽搜了哦~~~\n");
visit(start);
canVisit[start]=0;
while(!q.empty())
{
cur = q.front();
q.pop();
for(address=box[cur];address!=-1;address = edge[address].pre)
{
if(canVisit[edge[address].to])
{
visit(address);
canVisit[edge[address].to] = 0;//标记,访问过的不再访问
q.push(edge[address].to);//新访问的结束
}
}
}
printf("遍历完成\n");
}
int main()
{
int i;
int from,to;
while(~scanf("%d%d",&n,&e))//输入结点数,边数
{
iniPreLinkList();
for(i=0;i<e;i++)
{
scanf("%d%d",&from,&to);//输入边
addDirectedEdge(from,to);
}
printf("刚才构造的邻接链表为:\n");
printList();
printf("\n");
bfs(0);
}
return 0;
}
/*
4 4
0 1
1 2
0 2
1 3
*/
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友00a33f8
2012-06-05 · TA获得超过512个赞
知道小有建树答主
回答量:167
采纳率:100%
帮助的人:138万
展开全部
...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式