图算法-深度优先遍历和广度优先遍历

本文深入探讨了图数据结构的两种主要遍历算法:深度优先搜索(DFS)和广度优先搜索(BFS)。通过具体的C语言实现,详细解释了如何使用邻接表和邻接矩阵来存储图,并展示了如何利用DFS和BFS进行有效的图遍历。文章还提供了完整的代码示例,帮助读者理解算法的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

//邻接表定义
typedef struct ArcNode{
        int adjvex;
        ArcNode* next;
}ArcNode;
 
typedf struct VNode{
       int data;
       ArcNode* firstarc;
}VNode;
 
typedef struct{
       VNode adjlist[MAXSIZE];
       int n,e;
}ALGraph;
 
//邻接矩阵存储结构
typedef struct{
      int d[MAXSIZE];
      int arcs[MAXSIZE][MAXSIZE];
      int n,e;
}MGraph;

 

//DFS 深度优先遍历

bool visited[maxsize]={false};

void DFS(ALgrpah g,int v)
{
      ArcNode *p;
      visted[v]=true;

      p=g.adjlist[v].firstarc;
      while(p!=NULL)
      {
         if(visited[p->adjvex]==false)
         {
            DFS(g,p->adjvex);
         }
      
         p=p->next;
      }

}



void dfs(ALGraph g)
{
     for(int i=0;i<g.n;i++)
     {
       if(visited[i]==false) {DFS(g,i);}
     } 
}

 

//bfs 广度优先遍历


void BFS(ALGraph g,int v)
{
        ArcNode *p;
        visited[v]=true;
   
        queue<int> q;
        q.push(v);

        while(!q.empty())
        {
          int w=q.front();
          q.pop();

          p=g.adjlist[w].firstarc;
           
          while(p!=null)
          {
                if(visited[p->adjvex]==false)
                {
                     visited[p->adjvex]=true;
                     q.push(p->adjvex);
                }
                p=p->next;
          }

        }
}



///
void bfs(ALgraph g)
{
      for(int i=0;i<g.n;i++)     
      {
         if(visited[i]==false) {BFS(g,i);}
      }
}


 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值