int vexnum,arcnum; //图的当前顶点和弧数 }Graph;
typedef struct //队列结构 {int elem[MAXQSIZE]; //数据域 int front; //队头指针 int rear; //队尾指针 }SqQueue;
BOOL visited[MAX_VERTEX_NUM]; //全局变量——访问标志数组 void CreateGraph(Graph &); //生成图的邻接表 void DFSTraverse(Graph); //深度优先搜索遍历图 void DFS(Graph,int);
void BFSTraverse(Graph); //广度优先搜索遍历图 void Initial(SqQueue &); //初始化一个队列 BOOL QueueEmpty(SqQueue); //判断队列是否空 BOOL EnQueue(SqQueue &,int); //将一个元素入队列 BOOL DeQueue(SqQueue &,int &); //将一个元素出队列
int FirstAdjVex(Graph,int); //求图中某一顶点的第一个邻接顶点 int NextAdjVex(Graph,int,int); //求某一顶点的下一个邻接顶点 int main()
{Graph G; //采用邻接表结构的图 char j='y';
printf(\题目:编制一个“图遍历的演示”的程序.\\n\);
//------------------程序解说---------------------------- printf(\本程序将演示生成一个图,并对它进行遍历.\\n\);
printf(\输入图的顶点数和弧数:\\n格式:顶点数,弧数;例如:5,4\\n\); printf(\接着输入各边(弧尾,弧头):\\n例如:5,3\\n 3,1\\n 1,2\\n 2,4\\n\);
printf(\程序会生成一个图,并对它进行深度和广度遍历.\\n\); printf(\深度遍历:1->2->4->3->5\\n广度遍历:1->2->3->4->5\\n\); //------------------------------------------------------ while(j!='N'&&j!='n') {
printf(\请输入顶点数和弧数:\);
scanf(\,&G.vexnum,&G.arcnum); //输入图的顶点数和弧数 CreateGraph(G); //生成邻接表结构的图 DFSTraverse(G); //深度优先搜索遍历图 BFSTraverse(G); //广度优先搜索遍历图 printf(\图遍历完毕,继续进行吗?(Y/N)\); scanf(\,&j); } }
void CreateGraph(Graph &G) {//构造邻接表结构的图G int i;
int start,end; ArcNode *s;
for(i=1;i<=G.vexnum;i++) G.AdjList[i]=NULL; //初始化指针数组 for(i=1;i<=G.arcnum;i++)
{scanf(\,&start,&end); //输入弧的起点和终点 s=(ArcNode *)malloc(sizeof(ArcNode)); //生成一个弧结点 s->nextarc=G.AdjList[start]; //插入到邻接表中 s->adjvex=end; G.AdjList[start]=s;
{s=(ArcNode *)malloc(sizeof(ArcNode)); s->nextarc=G.AdjList[end]; s->adjvex=start; G.AdjList[end]=s; } } }
void DFSTraverse(Graph G) {//深度优先遍历图G int i;
printf(\深度优先遍历:\);
相关推荐: