数据结构中用邻接矩阵方式储存图,广度优先,深度优先遍历

数据结构中用邻接矩阵方式储存图,广度优先,深度优先遍历 - python - ITeye技术网站

以下是作业,用它用实现用邻接矩阵的方式来进行广度优先和深度优先的遍历。

代码比较简单,用了两个小时来写出来。

/**用邻接矩阵的方式来储存图,用广度优先方式进行遍历 **/

C代码  收藏代码
  1. #include "stdio.h"  
  2. #define max_matrix 10  
  3.   
  4. int visited[max_matrix],matrix[max_matrix][max_matrix];  
  5. int n;  
  6. int board_traverse();  
  7.   
  8. int main()  
  9. {  
  10.     int i,j;  
  11.     scanf("%d",&n);  
  12.     if (n<1)  
  13.     {  
  14.         printf("n must be >1\n");  
  15.         exit(0);  
  16.     }  
  17.     if (n>max_matrix)  
  18.     {  
  19.         printf("n must be <%d\n",max_matrix);  
  20.         exit(0);  
  21.     }  
  22.     for (i=0;i<n;i++)  
  23.     {  
  24.         visited[i]=0;  
  25.         for (j=0;j<n;j++)  
  26.             matrix[i][j] = 0;  
  27.     }  
  28.     while (scanf("%d %d",&i,&j)==2)  
  29.     {  
  30.         matrix[i-1][j-1]=1;  
  31.     }  
  32.       
  33.     for(i=0;i<n;i++)  
  34.     {  
  35.         for (j=0;j<n;j++)  
  36.             printf("%d ",matrix[i][j]);  
  37.         printf("\n");  
  38.     }  
  39.     printf("1 ");  
  40.     board_traverse(0);  
  41. }  
  42.   
  43.   
  44. int board_traverse()  
  45. {  
  46.     int temp,i,j,ma_j,ma_i;  
  47.     for (ma_i=0;ma_i<n;ma_i++)  
  48.         for (ma_j=ma_i;ma_j<n;ma_j++)  
  49.             if (matrix[ma_i][ma_j] && visited[ma_j]==0)  
  50.             {  
  51.                 printf("%d ",ma_j+1);  
  52.                 visited[ma_j]=1;  
  53.             }  
  54. }  

 /**用邻接矩阵的方式来储存图,用深度优先方式进行遍历 **/

C代码  收藏代码
  1. #include "stdio.h"  
  2. #define max_matrix 10  
  3.   
  4. int visited[max_matrix],matrix[max_matrix][max_matrix];  
  5. int n;  
  6. int deep_traverse(int);  
  7.   
  8. int main()  
  9. {  
  10.     int i,j;  
  11.     scanf("%d",&n);  
  12.     if (n<1)  
  13.     {  
  14.         printf("n must be >1\n");  
  15.         exit(0);  
  16.     }  
  17.     if (n>max_matrix)  
  18.     {  
  19.         printf("n must be <%d\n",max_matrix);  
  20.         exit(0);  
  21.     }  
  22.     for (i=0;i<n;i++)  
  23.     {  
  24.         visited[i]=0;  
  25.         for (j=0;j<n;j++)  
  26.             matrix[i][j] = 0;  
  27.     }  
  28.     while (scanf("%d %d",&i,&j)==2)  
  29.     {  
  30.         matrix[i-1][j-1]=1;  
  31.     }  
  32.       
  33.     for(i=0;i<n;i++)  
  34.     {  
  35.         for (j=0;j<n;j++)  
  36.             printf("%d ",matrix[i][j]);  
  37.         printf("\n");  
  38.     }  
  39.     printf("1->");  
  40.     deep_traverse(0);  
  41. }  
  42.   
  43. int deep_traverse(int ma_i)  
  44. {  
  45.     int temp,i,j,ma_j;  
  46.     ma_j = ma_i;  
  47.     while (ma_j<n)  
  48.     {  
  49.         if (matrix[ma_i][ma_j] && visited[ma_j]==0)  
  50.         {  
  51.             printf("%d->",ma_j+1);  
  52.             visited[ma_j]=1;  
  53.             deep_traverse(ma_j);  
  54.         }  
  55.         ma_j++;  
  56.     }  
  57. }  
原文地址:https://www.cnblogs.com/lexus/p/2526052.html