图中路径的问题!

wochangwan 2009-06-06 02:22:08
对于给定的一个图!现在考虑这样一个问题:要输入源点和终点。如果图中不存在此源点到终点的路

径则输出不存在!若存在则输出所有从源点到终点的路径!

typedef struct node
{
int adjvex;
struct node *next;
}edgenode;
typedef struct
{
char vertex;
edgenode *link;
}vexnode;
typedef struct
{
int data[maxsize];
int front,rear;
}sequeue;
void SETNULL(sequeue *sq) //置空队
{
sq->front=maxsize-1;
sq->rear=maxsize-1;
}
int EMPTY(sequeue *sq)
{
if(sq->rear==sq->front)
{
return TRUE;
}
else
return FALSE;
}
void ENQUEUE(sequeue *sq,char x) //进队
{
sq->rear=(sq->rear+1)%maxsize;
sq->data[sq->rear]=x;
}
int DEQUEUE(sequeue *sq) //出队
{
sq->front=(sq->front+1)%maxsize;
return (sq->data[sq->front]);
}
void BFSL(vexnode ga,int i,int j) //广度优先的算法
{
int k;
char a;
a=ga[j].vertex;
edgenode *p;
sequeue *Q;
Q=(sequeue*)malloc(sizeof(sequeue));
SETNULL(Q);
visit[i]=TRUE;
ENQUEUE(Q,i);
while(!EMPTY(Q))
{
k=DEQUEUE(Q);
p=ga[k].link;
while(p!=NULL)
{
if(!visit[p->adjvex])
{
if(a==ga[p->adjvex].vertex)
break;
else
{
visit[p->adjvex]=TRUE;
ENQUEUE(Q,p->adjvex);
}
}
p=p->next;
}
if(p!=NULL)
break;
}
if(p!=NULL)
printf("can find.\n");
else
printf("can't find.\n");
}

我给出了邻接表表示的一个图的广度优先算法!但只能判断是否存在路径!但如果存在路径了如何存储不同的路径到最后输出路径呢?
请高手们给出思路啊!
...全文
49 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq675927952 2009-06-09
  • 打赏
  • 举报
回复
怎么结帖率又等于0啊, 哥们出来混请急时结帖。
wochangwan 2009-06-08
  • 打赏
  • 举报
回复
谢谢两位大哥了~~大概思路已经有了~~~我刚刚写的BFS的代码所以只往BFS上想了忘了DFS了~!
太谢谢你们的指点了!
allen303allen 2009-06-08
  • 打赏
  • 举报
回复
要输出所有的路径BFS确实不方便吧,我也推荐用DFS,找到一条就输出,然后回溯的时候直接更新当前查找的路径,不难实现的。楼主可以找找网上关于DFS需要输出路径的代码,实现起来都是大同小异。
liao05050075 2009-06-06
  • 打赏
  • 举报
回复
一个节点的前驱节点也有好几个?
不会的。BFS的话,每个结点只进队一次,也就是说,它只会从一个结点来到它。到了最终结点也就直接返回了。
怎么会有多个前驱节点?
BFS一般用来找最短路径。
如果说你想要找出所有的可行路径,那就用DFS吧。边走边记下路径就行了。
wochangwan 2009-06-06
  • 打赏
  • 举报
回复
我明白3楼的意思~~~但是一个节点的前驱节点也有好几个~怎么才能得到我我们想要的路径呢?

有具体的代码吗?
liao05050075 2009-06-06
  • 打赏
  • 举报
回复
用BFS输出路径其实是很容易的。
你只要把队列改成只进不出,然后队列元素变成结构体(一个结点号,一个是标记它从队中哪个位置来的)。
你找到路径的最后一个结点时,就可以根据它是从队列中的哪个位置来的而得知该路径上,它的上一个结点,上上个结点直至最开始那个结点是什么了。
然后你就倒着输出就是了。
  • 打赏
  • 举报
回复
点击插入源代码,选择C/C++。

好长,帮顶哈
wochangwan 2009-06-06
  • 打赏
  • 举报
回复
晕怎么把源代码导入呢?~~~~上面的代码太乱了我点了插入源代码怎么成了这个样子了~!郁闷!!

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧