第十二周项目4 利用遍历思想求解图问题(7)

来源:互联网 发布:linux nat配置转发 编辑:程序博客网 时间:2024/05/30 23:40

问题及代码:

/* 02.* Copyright (c)2016,烟台大学计算机与控制工程学院 03.* All rights reserved. 04.* 文件名称:zhou.cpp 05.* 作    者:吕方舟 06.* 完成日期:2016年11月27日 07.* 版 本 号:v1.0 08.* 问题描述:求不带权连通图G中,距离顶点v最远的顶点k 09.*/  10.#include <stdio.h>  11.#include <malloc.h>  12.#include "graph.h"  13.  14.int Maxdist(ALGraph *G,int v)  15.{  16.    ArcNode *p;  17.    int i,j,k;  18.    int Qu[MAXV];               //环形队列  19.    int visited[MAXV];              //访问标记数组  20.    int front=0,rear=0;             //队列的头、尾指针  21.    for (i=0; i<G->n; i++)          //初始化访问标志数组  22.        visited[i]=0;  23.    rear++;  24.    Qu[rear]=v;                 //顶点v进队  25.    visited[v]=1;               //标记v已访问  26.    while (rear!=front)  27.    {  28.        front=(front+1)%MAXV;  29.        k=Qu[front];                //顶点k出队  30.        p=G->adjlist[k].firstarc;       //找第一个邻接点  31.        while (p!=NULL)             //所有未访问过的相邻点进队  32.        {  33.            j=p->adjvex;            //邻接点为顶点j  34.            if (visited[j]==0)          //若j未访问过  35.            {  36.                visited[j]=1;  37.                rear=(rear+1)%MAXV;  38.                Qu[rear]=j; //进队  39.            }  40.            p=p->nextarc;           //找下一个邻接点  41.        }  42.    }  43.    return k;  44.}  45.  46.int main()  47.{  48.    ALGraph *G;  49.    int A[9][9]=  50.    {  51.        {0,1,1,0,0,0,0,0,0},  52.        {0,0,0,1,1,0,0,0,0},  53.        {0,0,0,0,1,1,0,0,0},  54.        {0,0,0,0,0,0,1,0,0},  55.        {0,0,0,0,0,1,1,0,0},  56.        {0,0,0,0,0,0,0,1,0},  57.        {0,0,0,0,0,0,0,1,1},  58.        {0,0,0,0,0,0,0,0,1},  59.        {0,0,0,0,0,0,0,0,0}  60.    };  //请画出对应的有向图  61.    ArrayToList(A[0], 9, G);  62.    printf("离顶点0最远的顶点:%d",Maxdist(G,0));  63.    return 0;  64.}  

运行结果:

知识点总结:求不带权连通图中距离顶点最远的顶点k。

学习心得:这里采用广度优先的遍历算法,由于只需求一个顶点,不需求路径,所以采用的队列可以是环形队列。


0 0
原创粉丝点击