065.图的深度优先遍利

简介: 065.图的深度优先遍利
/*/*/
/*                           图的深度优先遍历                  */
/*/*/
#include <stdlib.h>
#include <stdio.h>
struct node                       /* 图顶点结构定义     */
{
   int vertex;                    /* 顶点数据信息       */
   struct node *nextnode;         /* 指下一顶点的指标   */
};
typedef struct node *graph;       /* 图形的结构新型态   */
struct node head[9];              /* 图形顶点数组       */
int visited[9];                   /* 遍历标记数组       */
/********************根据已有的信息建立邻接表********************/
void creategraph(int node[20][2],int num)/*num指的是图的边数*/
{
   graph newnode;                 /*指向新节点的指针定义*/
   graph ptr;
   int from;                      /* 边的起点          */
   int to;                        /* 边的终点          */
   int i;
   for ( i = 0; i < num; i++ )    /* 读取边线信息,插入邻接表*/
   {
      from = node[i][0];         /*    边线的起点            */
      to = node[i][1];           /*   边线的终点             */
    /* 建立新顶点 */
      newnode = ( graph ) malloc(sizeof(struct node));
      newnode->vertex = to;        /* 建立顶点内容       */
      newnode->nextnode = NULL;    /* 设定指标初值       */
      ptr = &(head[from]);         /* 顶点位置           */
      while ( ptr->nextnode != NULL ) /* 遍历至链表尾   */
         ptr = ptr->nextnode;     /* 下一个顶点         */
      ptr->nextnode = newnode;    /* 插入节点        */
   }
}
/**********************  图的深度优先搜寻法********************/
void dfs(int current)
{
   graph ptr;
   visited[current] = 1;          /* 记录已遍历过       */
   printf("vertex[%d]\n",current);   /* 输出遍历顶点值     */
   ptr = head[current].nextnode;  /* 顶点位置           */
   while ( ptr != NULL )          /* 遍历至链表尾       */
   {
      if ( visited[ptr->vertex] == 0 )  /* 如过没遍历过 */
         dfs(ptr->vertex);              /* 递回遍历呼叫 */
      ptr = ptr->nextnode;              /* 下一个顶点   */
   }
}
/****************************** 主程序******************************/
void main()
{
   graph ptr;
   int node[20][2] = { {1, 2}, {2, 1},  /* 边线数组     */
                       {1, 3}, {3, 1},
                       {1, 4}, {4, 1},
                       {2, 5}, {5, 2},
                       {2, 6}, {6, 2},
                       {3, 7}, {7, 3},
                       {4, 7}, {4, 4},
                       {5, 8}, {8, 5},
                       {6, 7}, {7, 6},
                       {7, 8}, {8, 7} };
   int i;
   clrscr();
   for ( i = 1; i <= 8; i++ )      /*   顶点数组初始化  */
   {
      head[i].vertex = i;         /*    设定顶点值      */
      head[i].nextnode = NULL;    /*       指针为空     */
      visited[i] = 0;             /* 设定遍历初始标志   */
   }
   creategraph(node,20);          /*    建立邻接表      */
   printf("Content of the gragh's ADlist is:\n");
   for ( i = 1; i <= 8; i++ )
   {
      printf("vertex%d ->",head[i].vertex); /* 顶点值    */
      ptr = head[i].nextnode;             /* 顶点位置   */
      while ( ptr != NULL )       /* 遍历至链表尾       */
      {
         printf(" %d ",ptr->vertex);  /* 印出顶点内容   */
         ptr = ptr->nextnode;         /* 下一个顶点     */
      }
      printf("\n");               /*   换行             */
   }
   printf("\nThe end of the dfs are:\n");
   dfs(1);                        /* 打印输出遍历过程   */
   printf("\n");                  /* 换行               */
   puts(" Press any key to quit...");
   getch();
}
相关文章
|
传感器 监控 搜索推荐
探索智能家居技术的未来
【10月更文挑战第6天】 本文深入探讨了智能家居技术的发展历程、当前应用及其未来前景。通过分析物联网(IoT)的基本原理和智能家居设备的实际应用案例,揭示了该领域面临的挑战与机遇,并提出了未来发展的趋势和可能性。
339 3
|
Ubuntu Linux Python
update-alternatives --config python 为什么不能使用
【6月更文挑战第14天】update-alternatives --config python 为什么不能使用
415 1
|
前端开发 JavaScript 容器
技术经验解读:个人练习:使用HTML+CSS3制作图片轮播功能(不使用JavaScript)
技术经验解读:个人练习:使用HTML+CSS3制作图片轮播功能(不使用JavaScript)
215 0
|
NoSQL Linux Redis
Redis 6.X Sentinel 哨兵集群搭建
Redis 6.X Sentinel 哨兵集群搭建
298 5
|
自然语言处理 新能源 程序员
长安汽车 X 阿里云:合作研发汽车垂域大模型
长安汽车 X 阿里云:合作研发汽车垂域大模型
461 1
|
安全
PCB中泪滴的作用
泪滴在PCB设计中起到加固线路、保护焊盘和优化信号传输的作用,防止外力导致接触点断裂,确保焊盘稳定,减少阻抗突变。通过工具栏的&quot;Tool&quot;-&gt;&quot;Teardrops&quot;或快捷键&quot;T+E&quot;添加泪滴,选择操作模式(添加或移除)、对象(全部或选中)及配置选项,如泪滴形状、强制执行和大小调整。在添加过程中,可选曲线或直线样式,并能自动调节尺寸以适应空间限制。
426 4
|
定位技术
ArcGIS手动分割矢量面要素从而划分为多个面部分的方式:Cut Polygons Tool
ArcGIS手动分割矢量面要素从而划分为多个面部分的方式:Cut Polygons Tool
580 1
|
图形学
Unity 【Content Size Fitter】- 聊天气泡自动适配Text文本框大小
Unity 【Content Size Fitter】- 聊天气泡自动适配Text文本框大小
836 1
Unity 【Content Size Fitter】- 聊天气泡自动适配Text文本框大小
|
机器学习/深度学习 编解码 算法
【OpenVI】AIGC技术在图像超分上的创新应用
近10年来,深度学习技术得到了长足进步,在图像增强领域取得了显著的成果,尤其是以GAN为代表的生成式模型在图像复原、老片修复,图像超分辨率等方面大放异彩。图像超分辨率是视频增强方面,用于提升画质的典型应用。生成对抗网络GAN使得在图像分辨率增加的同时,保持细节特征,补充生成真实的纹理,其中应用广泛的工作是Real-ESRGAN。
1814 1
|
编译器 程序员 C++
如何在项目中引入googtest(下)——通过CMake引入库
如何在项目中引入googtest(下)——通过CMake引入库
626 0