实现图的广度优先遍历算法 //MGraph.h
typedef enum{DG,DN,UDG,UDN} GraphKind;//图的种类
//弧结点结构
typedef struct{char vertex[20];//顶点数组int arcs[20][20];//邻接矩阵 int vexnum,arcnum;//顶点数和弧数GraphKind kind;
}AdjMatrix;
//图的遍历
#include
#include"MGraph.h"
#include
#define TRUE 1
#define FALSE 0
using namespace std;
typedef struct Node
{int data;struct Node* next;
}LinkQueueNode;
typedef struct
{LinkQueueNode* front;LinkQueueNode* rear;
}LinkQueue;
int visited[20];
int visitedBFS[20]={0};
void DepthFirstSearch(AdjMatrix g,int v0);
void BreadthFirstSearch(AdjMatrix g);
int main()
{AdjMatrix am;cout<<"请输入顶点数:";cin>>am.vexnum;if(am.vexnum>20){cout<<"输入数值过大!"<>am.vertex[i];}cout<<"请依次输入各边权值:"<>am.arcs[i][j];}}cout<<" ";for(int i=0;ifront=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));if(Q->front!=NULL){Q->rear=Q->front;Q->front->next=NULL;return(TRUE);}else return(FALSE); /* 溢出!*/
}
int EnterQueue(LinkQueue *Q,int x)
{ /* 将数据元素x插入到队列Q中 */LinkQueueNode *NewNode;NewNode=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));if(NewNode!=NULL){NewNode->data=x;NewNode->next=NULL;Q->rear->next=NewNode;Q->rear=NewNode;return(TRUE);}else return(FALSE); /* 溢出!*/
}
int DeleteQueue(LinkQueue *Q)
{ /* 将队列Q的队头元素出队 */LinkQueueNode *p;if(Q->front==Q->rear)return(FALSE);p=Q->front->next;Q->front->next=p->next; /* 队头元素p出队 */if(Q->rear==p) /* 如果队中只有一个元素p,则p出队后成为空队 */Q->rear=Q->front; free(p); /* 释放存储空间 */return(TRUE);
}
int JudgeQueue(LinkQueue *Q)
{if(Q->front==Q->rear){return 0;}else{return 1; }
}
int FindVertex(AdjMatrix g,int k) //传入无向图G,要查找节点的位序k
{if(k>=g.vexnum || k<0 ){return -1;} //参数不合理直接返回ERRORint i;for(i=0;i=g.vexnum|| k<0 || m>=g.vexnum-1 || m<0)return -1; //参数不合理直接返回ERRORint i;for(i=m+1;i