免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1332 | 回复: 0
打印 上一主题 下一主题

关于图的遍历问题,谢谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-06-08 14:22 |只看该作者 |倒序浏览
深度遍历。该程序无法遍历完,为什么?
  1. #include <stdio.h>;
  2. #define vnum 20
  3. typedef struct arcnode
  4. {
  5.   int adjvex;
  6.   struct arcnode *nextarc;
  7. } ArcNodeTp;
  8. typedef struct vexnode
  9. {
  10.   int vertex;
  11.   ArcNodeTp *firstarc;
  12. } AdjList[vnum];
  13. typedef struct linkgraph
  14. {
  15.   AdjList adjs;
  16.   int vexnum, arcnum;
  17. } LGraphTp;
  18. LGraphTp* Create_LNvGraph (LGraphTp *ga);
  19. int main (void)
  20. {
  21.   LGraphTp *ga;
  22.   int input;
  23.   ga = (LGraphTp *) malloc (sizeof(LGraphTp));
  24.   ga = Create_LNvGraph(ga);
  25.   Print_LinkList(ga);
  26.   printf("\n%s\n%s", "###深度优先搜索###", "请问要搜索的结点号:");
  27.   scanf("%d", &input);
  28.   DFS(ga, input);
  29.   printf("\n\n");
  30. }
  31. LGraphTp* Create_LNvGraph (LGraphTp *ga)
  32. {
  33.   ArcNodeTp *p;
  34.   int vex, arc, vexs, arcnum;
  35.   int i, j, k;
  36.   printf("\n无向图邻接表\n");
  37.   printf("请输入顶点个数:");
  38.   scanf("%d", &vex);
  39.   printf("请输入边数个数:");
  40.   scanf("%d", &arc);
  41.   ga ->; vexnum = vex;
  42.   ga ->; arcnum = arc;
  43.   for (i = 0; i < ga ->; vexnum; i++)
  44.     {
  45.       ga ->; adjs[i].vertex = i + 1;
  46.       ga ->; adjs[i].firstarc = NULL;
  47.     }
  48.   for (k = 0; k < arc; k++)
  49.     {
  50.       printf("请输入第%d条边两个顶点的编号:", k + 1);
  51.       scanf("%d %d", &i, &j);
  52.       p = (ArcNodeTp *) malloc (sizeof(ArcNodeTp));
  53.       p ->; adjvex = j;
  54.       p ->; nextarc = ga ->; adjs[i - 1].firstarc;
  55.       ga ->; adjs[i - 1].firstarc = p;
  56.       p = (ArcNodeTp *) malloc (sizeof(ArcNodeTp));
  57.       p ->; adjvex = i;
  58.       p ->; nextarc = ga ->; adjs[j - 1].firstarc;
  59.       ga ->; adjs[j - 1].firstarc = p;
  60.     }
  61.   return (ga);
  62. }
  63. int Print_LinkList (LGraphTp *ga)
  64. {
  65.   ArcNodeTp *p;
  66.   int k;
  67.   printf("\n目前输入的邻接表为:\n\n");
  68.   
  69.   for (k = 0; k < ga ->; vexnum; k++)
  70.     {
  71.       printf("V%d:%d |", k + 1, ga ->; adjs[k].vertex);
  72.       p = ga ->; adjs[k].firstarc;
  73.       while (p != NULL)
  74.         {
  75.           printf(" ->; %d", p ->; adjvex);
  76.           p = p ->; nextarc;
  77.         }
  78.       printf("\n");
  79.     }
  80. }
  81. int DFS (LGraphTp *ga, int v)
  82. {
  83.   ArcNodeTp *p;
  84.   int j;
  85.   static int visited[vnum];
  86.   for (j = 0; j < vnum; j++)
  87.     visited[vnum] = 0;
  88.   printf(" ->; %d ", v);
  89.   visited[v] = 1;
  90.   p = ga ->; adjs[v].firstarc;
  91.   while (p != NULL)
  92.     {
  93.       if (! visited[p ->; adjvex])
  94.         DFS(ga, p ->; adjvex);
  95.       p = p ->; nextarc;
  96.     }
  97. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP