无向图的深度广度遍历 递归 队列

Code:

  1. // 链树.cpp : 定义控制台应用程序的入口点。  
  2. #include “stdafx.h”  
  3. #include <iomanip>//  
  4. #include <iostream>  
  5. using namespace std;  
  6. #define MAX_VERTEX 10  
  7. typedef struct Node  
  8.     {int vertex;  
  9.      struct Node *next;  
  10.     }node,*Pnode;  
  11. typedef struct Node adjlist[MAX_VERTEX];  
  12. void Creat_Graph(adjlist G,int &n)  
  13.     {int e,s,d;  
  14.      Pnode p,q;  
  15.      cout<<“input vertex num & edge num”<<endl;  
  16.      cin>>n>>e;  
  17.      for(int i=0;i<n;i++)  
  18.          {G[i].vertex=i;  
  19.      G[i].next=NULL;  
  20.          }  
  21.        
  22.      for(int i=0;i<e;i++)//  
  23.          {cout<<“input the “<<i<<” edge’s two vertex”  
  24.               <<endl;     
  25.           cin>>s  
  26.              >>d;  
  27.           p=new node;  
  28.           p->vertex=d;  
  29.           p->next=NULL;  
  30.           q=&G[s];  
  31.           while(q->next)q=q->next;  
  32.           q->next=p;  
  33.           //no directed  
  34.            p=new node;  
  35.           p->vertex=s;  
  36.           p->next=NULL;  
  37.           q=&G[d];  
  38.           while(q->next)q=q->next;  
  39.           q->next=p;  
  40.           //  
  41.          }  
  42.     }  
  43. void Print_Graph(adjlist G,int n)  
  44. {Pnode p;  
  45.        
  46. for(int i=0;i<n;i++)  
  47.   {cout<<G[i].vertex;  
  48.      p=G[i].next;  
  49. while(p!=NULL)  
  50.     {  
  51. cout<<“→”<<p->vertex;  
  52. p=p->next;  
  53.     }  
  54. cout<<endl;  
  55.   }  
  56. }  
  57. /*****************deep******************/  
  58. int visited[MAX_VERTEX];  
  59. void Depth_First_Search(adjlist G,int v)  
  60.     {   
  61.       Pnode p;  
  62.       visited[v]=1;  
  63.       cout<<setw(3)<<v;  
  64.       p=G[v].next;  
  65.       while(p)  
  66.           {if(visited[p->vertex]==0)  
  67.             {  
  68.              Depth_First_Search(G,p->vertex);  
  69.              }  
  70.            p=p->next;  
  71.           }  
  72.       cout<<endl;  
  73.        
  74.     }  
  75. int visited2[MAX_VERTEX];  
  76. int queue[MAX_VERTEX];  
  77. void Breadth_First_Search(adjlist G,int vi)  
  78.     {int front=0,rear=0,v;  
  79.       Pnode p;  
  80.       visited2[vi]=1;cout<<setw(3)<<vi;//visit     
  81.        queue[rear]=vi;rear++;//input   
  82.   
  83.        while(front!=rear)  
  84.            {v=queue[front];front++;//delete  
  85.             
  86.        p=G[v].next;  
  87.        while(p)  
  88.            {  
  89.            if(visited2[p->vertex]==0)  
  90.             {  
  91.               visited2[p->vertex]=1;cout<<setw(3)<<p->vertex;  
  92.               queue[rear]=p->vertex;rear++;//input  
  93.                 
  94.                }  
  95.            p=p->next;  
  96.            }//while p    
  97.            }  
  98.     }  
  99.       
  100.   
  101.   
  102.   
  103.   
  104.   
  105.   
  106.   
  107.   
  108.   
  109.   
  110.   
  111.   
  112. int main()  
  113. {     
  114. int n;  
  115. adjlist G;  
  116.     Creat_Graph(G,n);  
  117.         Print_Graph(G,n);  
  118.     cout << “Hello world!” << endl;  
  119.     Depth_First_Search(G,0);  
  120.     Breadth_First_Search(G,0);  
  121.     int t;  
  122.     cin>>t;  
  123.     return 0;  
  124. }  

 

 

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/kkgbn/article/details/6497619
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞