对于给定的一个图!现在考虑这样一个问题:要输入源点和终点。如果图中不存在此源点到终点的路
径则输出不存在!若存在则输出所有从源点到终点的路径!
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");
}
我给出了邻接表表示的一个图的广度优先算法!但只能判断是否存在路径!但如果存在路径了如何存储不同的路径到最后输出路径呢?
请高手们给出思路啊!