鱼C论坛

 找回密码
 立即注册
查看: 4000|回复: 4

[技术交流] 图的广度优先搜索代码

[复制链接]
发表于 2015-12-30 16:54:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
跟深度优先还是一样,这两个是我在做数据结构作业花大量时间去找的代码,就是老师的要求肯定百度是无法直接满足的,就必须通过各个网站的不同功能的代码综合在一起,然后组成的的代码。有错误的话欢迎大神们来纠正。
  1. #include <stdio.h>  
  2. #include <stdlib.h>


  3. typedef char VertexType;                //顶点类型应由用户定义
  4. typedef int EdgeType;                   //边上的权值类型应由用户定义

  5. #define MAXVEX  100             //最大顶点数,应由用户定义
  6. #define INFINITY  0                //用0来代表无穷大
  7. #define DEBUG
  8. int visit[100] = {};
  9. typedef struct
  10. {
  11.     VertexType vexs[MAXVEX];            //顶点表
  12.     EdgeType   arc[MAXVEX][MAXVEX];         //邻接矩阵,可看作边
  13.     int numVertexes, numEdges;      //图中当前的顶点数和边数
  14. }Graph;
  15. int locates(Graph *g, char ch)
  16. {
  17.     int i = 0;
  18.     for(i = 0; i < g->numVertexes; i++)
  19.     {
  20.         if(g->vexs[i] == ch)
  21.         {
  22.             break;
  23.         }
  24.     }
  25.     if(i >= g->numVertexes)
  26.     {
  27.         return -1;
  28.     }
  29.      
  30.     return i;
  31. }
  32. void CreateGraph(Graph *g)
  33. {
  34.     int i, j, k, w;
  35.     printf("输入顶点数和边数:\n");
  36.     scanf("%d,%d", &(g->numVertexes), &(g->numEdges));
  37.      
  38.     #ifdef DEBUG
  39.     printf("%d %d\n", g->numVertexes, g->numEdges);
  40.     #endif
  41.     printf("输入节点编号:\n");
  42.     for(i = 0; i < g->numVertexes; i++)
  43.     {
  44.         g->vexs[i] = getchar();
  45.         while(g->vexs[i] == '\n')
  46.         {
  47.             g->vexs[i] = getchar();
  48.         }
  49.     }
  50.      
  51.     #ifdef DEBUG
  52.     for(i = 0; i < g->numVertexes; i++)
  53.     {
  54.            
  55.         printf("%c ", g->vexs[i]);
  56.     }
  57.     printf("\n");
  58.     #endif

  59.    
  60.     for(i = 0; i < g->numEdges; i++)
  61.     {
  62.         for(j = 0; j < g->numEdges; j++)
  63.         {
  64.             g->arc[i][j] = INFINITY; //邻接矩阵初始化
  65.         }
  66.     }
  67.     for(k = 0; k < g->numEdges; k++)
  68.     {
  69.         char p, q;
  70.         printf("输入边(vi,vj)上的下标i,下标j和权值:\n");
  71.          
  72.         p = getchar();
  73.         while(p == '\n')
  74.         {
  75.             p = getchar();
  76.         }
  77.         q = getchar();
  78.         while(q == '\n')
  79.         {
  80.             q = getchar();
  81.         }
  82.         scanf("%d", &w);   
  83.          
  84.         int m = -1;
  85.         int n = -1;
  86.         m = locates(g, p);
  87.         n = locates(g, q);
  88.         if(n == -1 || m == -1)
  89.         {
  90.             fprintf(stderr, "there is no this vertex.\n");
  91.             return;
  92.         }
  93.         //getchar();
  94.         g->arc[m][n] = w;
  95.         g->arc[n][m] = g->arc[m][n];  //因为是无向图,矩阵对称
  96.     }
  97. }
  98. void bfs(Graph *g)  
  99. {  
  100.     int i, j;  
  101.     int x;  
  102.     printf("遍历的节点次序为:") ;
  103.     for (i = 0; i < g->numVertexes; i++)
  104.         {  
  105.         if (visit[i] != 1)
  106.                 {  
  107.             visit[i] = 1;  
  108.             printf("%3c", g->vexs[i]);  
  109.   
  110.            
  111.         }  
  112.     }  
  113. }  
  114. void printGraph(Graph g)
  115. {
  116.     int i, j;
  117.     for(i = 0; i < g.numVertexes; i++)
  118.     {
  119.         for(j = 0; j < g.numVertexes; j++)
  120.         {
  121.             printf("%d  ", g.arc[i][j]);
  122.         }
  123.         printf("\n");
  124.     }
  125. }
  126.   
  127. int main()  
  128. {  
  129.     Graph g;
  130.    
  131.     CreateGraph(&g);
  132.     printGraph(g);
  133.         bfs(&g);  
  134.     printf("\n");  
  135.     printf("0代表无穷大");
  136.     return 0;  
  137. }  
复制代码

评分

参与人数 1荣誉 +3 鱼币 +10 收起 理由
~风介~ + 3 + 10 支持楼主!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-12-31 00:05:34 | 显示全部楼层
表示数据结构没学好啊~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-31 10:35:08 | 显示全部楼层
~风介~ 发表于 2015-12-31 00:05
表示数据结构没学好啊~

我也没学好。。。不然就自己写了。。不用去网上找。。。我现在在恶补小甲鱼的数据结构和算法。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-31 18:28:48 | 显示全部楼层
我叫淳子 发表于 2015-12-31 10:35
我也没学好。。。不然就自己写了。。不用去网上找。。。我现在在恶补小甲鱼的数据结构和算法。

我是学着学着就忘了~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-12 23:52:47 | 显示全部楼层
感谢分享
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-13 12:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表