十一周项目四

  1. /*  
  2. * Copyright (c)2017,烟台大学计算机与控制工程学院  
  3. * All rights reserved.  
  4. * 文件名称:项目4.cpp  
  5. * 作    者:黄玉娇  
  6. * 完成日期:2017年11月29日  
  7. * 版 本 号:v1.0  
  8. 问题描述:假设图G采用邻接表存储,分别设计实现以下要求的算法,要求用区别于示例中的图进行多次测试,通过观察输出值,掌握相关问题的处理方法。   
  9.   设计一个算法,判断顶点u到v是否有简单路径   
  10.     
  11. 输入描述:无   
  12. 输出描述:若干数据  
  13. */     
头文件及功能函数详见 【图 算法

代码:

[cpp]  view plain  copy
  1. #include <stdio.h>    
  2. #include <malloc.h>    
  3. #include "graph.h"    
  4. int visited[MAXV];     //定义存放节点的访问标志的全局数组    
  5. void ExistPath(ALGraph *G,int u,int v, bool &has)    
  6. {    
  7.     int w;    
  8.     ArcNode *p;    
  9.     visited[u]=1;    
  10.     if(u==v)    
  11.     {    
  12.         has=true;    
  13.         return;    
  14.     }    
  15.     p=G->adjlist[u].firstarc;    
  16.     while (p!=NULL)    
  17.     {    
  18.         w=p->adjvex;    
  19.         if (visited[w]==0)    
  20.             ExistPath(G,w,v,has);    
  21.         p=p->nextarc;    
  22.     }    
  23. }    
  24.     
  25. void HasPath(ALGraph *G,int u,int v)    
  26. {    
  27.     int i;    
  28.     bool flag = false;    
  29.     for (i=0; i<G->n; i++)    
  30.         visited[i]=0; //访问标志数组初始化    
  31.     ExistPath(G,u,v,flag);    
  32.     printf(" 从 %d 到 %d ", u, v);    
  33.     if(flag)    
  34.         printf("有简单路径\n");    
  35.     else    
  36.         printf("无简单路径\n");    
  37. }    
  38.     
  39. int main()    
  40. {    
  41.     ALGraph *G;    
  42.     int A[5][5]=    
  43.     {    
  44.         {0,0,0,0,0},    
  45.         {0,0,1,0,0},    
  46.         {0,0,0,1,1},    
  47.         {0,0,0,0,0},    
  48.         {1,0,0,1,0},    
  49.     };  //请画出对应的有向图    
  50.     ArrayToList(A[0], 5, G);    
  51.     HasPath(G, 1, 0);    
  52.     HasPath(G, 4, 1);    
  53.     return 0;    
  54. }    

测试 图结构及存储 :


运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值