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

问题及代码:

/* 
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值