早教吧作业答案频道 -->其他-->
写出对给定的无定向图从V1结点开始广度优先搜索历序列和广度优先生成树.
题目详情
写出对给定的无定向图从V1结点开始广度优先搜索历序列和广度优先生成树.
▼优质解答
答案和解析
#include
#define QueueSize 100
typedef int DataType;
typedef struct{
int front;
int rear;
int count;
DataType data[QueueSize];
}CirQueue;
void InitQueue(CirQueue *Q){
Q->front=Q->rear=0;
Q->count=0;
}
int QueueEmpty(CirQueue *Q){
return Q->count==0;
}
int QueueFull(CirQueue *Q){
return Q->count==QueueSize;
}
void EnQueue(CirQueue *Q,DataType x){
if(QueueFull(Q)){
printf("Queue overflow!");
exit(1);
}
Q->count++;
Q->data[Q->rear]=x;
Q->rear=(Q->rear+1)%QueueSize;
}
DataType DeQueue(CirQueue *Q){
DataType temp;
if(QueueEmpty(Q)){
printf("Queue underflow!");
exit(1);
}
temp=Q->data[Q->front];
Q->count--;
Q->front=(Q->front+1)%QueueSize;
return temp;
}
DataType QueueFront(CirQueue *Q){
if(QueueEmpty(Q)){
printf("Queue is empty!");
exit(1);
}
return Q->data[Q->front];
}
#include "CirQueue.h"
#define MaxVertexNum 100
typedef char VertexType;
typedef int EdgeType;
typedef enum{FALSE,TRUE} Boolean;
Boolean visited[MaxVertexNum];
typedef struct node{
int adjvex;
struct node *next;
}EdgeNode;
typedef struct vnode{
VertexType vertex;
EdgeNode *firstedge;
}VertexNode;
typedef VertexNode AdjList[MaxVertexNum];
typedef struct{
AdjList adjlist;
int n,e;
}ALGraph;
void CreateALGraph(ALGraph *G){
int i,j,k;
EdgeNode *s;
scanf("%d%d",&G->n,&G->e);
getchar();
printf("Enter the name of the nodes:\n");
for(i=0;in;i++){
G->adjlist[i].vertex=getchar();
G->adjlist[i].firstedge=NULL;
getchar();
}
for(k=0;ke;k++){
printf("Enter the edge of the graph:\n");
scanf("%d%d",&i,&j);
s=(EdgeNode*)malloc(sizeof(EdgeNode));
s->adjvex=j;
s->next=G->adjlist[i].firstedge;
G->adjlist[i].firstedge=s;
s=(EdgeNode*)malloc(sizeof(EdgeNode));
s->adjvex=i;
s->next=G->adjlist[j].firstedge;
G->adjlist[j].firstedge=s;
}
}
void DFS(ALGraph *G,int i){
EdgeNode *p;
printf("visit vertex:%c\n",G->adjlist[i].vertex);
visited[i]=TRUE;
p=G->adjlist[i].firstedge;
while(p){
if(!visited[p->adjvex])
DFS(G,p->adjvex);
p=p->next;
}
}
void DFSTraverse(ALGraph *G){
int i;
for(i=0;in;i++)
visited[i]=FALSE;
for(i=0;in;i++)
if(!visited)
DFS(G,i);
}
void BFS(ALGraph *G,int k){
int i;
CirQueue Q;
EdgeNode *p;
InitQueue(&Q);
printf("visit vertex:%c\n",G->adjlist[k].vertex);
visited[k]=TRUE;
EnQueue(&Q,k);
while(!QueueEmpty(&Q)){
i=DeQueue(&Q);
p=G->adjlist[i].firstedge;
while(p){
if(!visited[p->adjvex]){
printf("visit vertex:%c\n",G->adjlist[p->adjvex].vertex);
visited[p->adjvex]=TRUE;
EnQueue(&Q,p->adjvex);
}
p=p->next;
}
}
}
void main(){
ALGraph G;
CreateALGraph(&G);
BFS(&G,0);
}
#define QueueSize 100
typedef int DataType;
typedef struct{
int front;
int rear;
int count;
DataType data[QueueSize];
}CirQueue;
void InitQueue(CirQueue *Q){
Q->front=Q->rear=0;
Q->count=0;
}
int QueueEmpty(CirQueue *Q){
return Q->count==0;
}
int QueueFull(CirQueue *Q){
return Q->count==QueueSize;
}
void EnQueue(CirQueue *Q,DataType x){
if(QueueFull(Q)){
printf("Queue overflow!");
exit(1);
}
Q->count++;
Q->data[Q->rear]=x;
Q->rear=(Q->rear+1)%QueueSize;
}
DataType DeQueue(CirQueue *Q){
DataType temp;
if(QueueEmpty(Q)){
printf("Queue underflow!");
exit(1);
}
temp=Q->data[Q->front];
Q->count--;
Q->front=(Q->front+1)%QueueSize;
return temp;
}
DataType QueueFront(CirQueue *Q){
if(QueueEmpty(Q)){
printf("Queue is empty!");
exit(1);
}
return Q->data[Q->front];
}
#include "CirQueue.h"
#define MaxVertexNum 100
typedef char VertexType;
typedef int EdgeType;
typedef enum{FALSE,TRUE} Boolean;
Boolean visited[MaxVertexNum];
typedef struct node{
int adjvex;
struct node *next;
}EdgeNode;
typedef struct vnode{
VertexType vertex;
EdgeNode *firstedge;
}VertexNode;
typedef VertexNode AdjList[MaxVertexNum];
typedef struct{
AdjList adjlist;
int n,e;
}ALGraph;
void CreateALGraph(ALGraph *G){
int i,j,k;
EdgeNode *s;
scanf("%d%d",&G->n,&G->e);
getchar();
printf("Enter the name of the nodes:\n");
for(i=0;in;i++){
G->adjlist[i].vertex=getchar();
G->adjlist[i].firstedge=NULL;
getchar();
}
for(k=0;ke;k++){
printf("Enter the edge of the graph:\n");
scanf("%d%d",&i,&j);
s=(EdgeNode*)malloc(sizeof(EdgeNode));
s->adjvex=j;
s->next=G->adjlist[i].firstedge;
G->adjlist[i].firstedge=s;
s=(EdgeNode*)malloc(sizeof(EdgeNode));
s->adjvex=i;
s->next=G->adjlist[j].firstedge;
G->adjlist[j].firstedge=s;
}
}
void DFS(ALGraph *G,int i){
EdgeNode *p;
printf("visit vertex:%c\n",G->adjlist[i].vertex);
visited[i]=TRUE;
p=G->adjlist[i].firstedge;
while(p){
if(!visited[p->adjvex])
DFS(G,p->adjvex);
p=p->next;
}
}
void DFSTraverse(ALGraph *G){
int i;
for(i=0;in;i++)
visited[i]=FALSE;
for(i=0;in;i++)
if(!visited)
DFS(G,i);
}
void BFS(ALGraph *G,int k){
int i;
CirQueue Q;
EdgeNode *p;
InitQueue(&Q);
printf("visit vertex:%c\n",G->adjlist[k].vertex);
visited[k]=TRUE;
EnQueue(&Q,k);
while(!QueueEmpty(&Q)){
i=DeQueue(&Q);
p=G->adjlist[i].firstedge;
while(p){
if(!visited[p->adjvex]){
printf("visit vertex:%c\n",G->adjlist[p->adjvex].vertex);
visited[p->adjvex]=TRUE;
EnQueue(&Q,p->adjvex);
}
p=p->next;
}
}
}
void main(){
ALGraph G;
CreateALGraph(&G);
BFS(&G,0);
}
看了 写出对给定的无定向图从V1结...的网友还看了以下:
(2013•河南)下列图象分别与选项中的操作相对应,其中合理的是()A.向一定量稀硫酸中滴入水B. 2020-05-12 …
下列过程与配合物的形成无关的是()A.向一定量的AgNO3溶液中加入氨水至沉淀消失B.向FeCl3 2020-05-13 …
下列有关地图上确定方向的方法,正确的是()A.所有的地图都是“上北下南,左西右东”B.有指向标的地 2020-05-14 …
在外电路中和电源内部,正电荷都受到静电力作用,所以能不断的定向形成电流1.在外电路中和电源内部.正 2020-05-15 …
1.下列关于曲线运动中速度的方向的说法中正确的是A速度的方向总是沿着曲线且保持不变B速度的方向是时 2020-05-17 …
求问物理帝圆柱刚体纯滚动时摩擦力方向的判定(1)圆柱体从斜面上自己滚下时为啥摩擦力是沿着斜面向上( 2020-05-22 …
下列关于速度方向的说法正确的是()选择一个答案a.匀速直线运动的速度方向是可能改变的b.位移的方向 2020-05-22 …
场强方向的规定有点疑问书上说场强的方向规定为:正电荷受力的方向为该点场强的方向.这句话中的该点是哪 2020-05-23 …
怎么判断三角函数的定义域如y=2sin(2x+3/π)+5.我们老师说先求出五点再来解,可是我还是 2020-06-08 …
下列图象能正确反映对应变化关系的是()A.向一定量的二氧化锰中加入过氧化氢溶液B.将铁钉加入硫酸铜 2020-06-08 …