【问题标题】:Track level of nodes in a graph and print level for each node跟踪图中节点的级别并打印每个节点的级别
【发布时间】:2016-02-13 16:15:15
【问题描述】:

我想使用 BFS 算法遍历一个图,并希望按节点级别跟踪节点。 这是我的代码。

#include<iostream>
#include<queue>
#include<vector>
#include<stdlib.h>
using namespace std;
int main()
{
    int edges,a,b;
    vector<int>nodes[1000];
    cout<<"Enter the no of edges"<<endl;
    cin>>edges;
    for(int i=0; i<edges; i++)
    {
        cin>>a>>b;
        nodes[a].push_back(b);
        nodes[b].push_back(a);
    }

    cout<<endl;
    queue<int> que;
//initially que is empty
    bool visited[1000];
    int level[1000];
// mark all the vertices as not visited
    for(int i=0; i<1000; i++)
    {
        visited[i]=false;
    }
    int start;
    cout<<"\nEnter the starting node"<<endl;
    cin>>start;

//insert the starting node into the queue
    que.push(start);
    level[start]=1;
//mark the starting node as visited
    visited[start]=true;


    cout<<"\nBFS Traversal\n";

    while(!que.empty())
    {
        //Dequeue a vertex from que and print it
        int front = que.front();
        cout<<front<<" ";
        que.pop();
        // get all adjacent vertices of the dequeued vertex s
        // If an adjacent vertex has not been visited,
        //then mark it as visited
        // and enqueue it
        for(vector<int>::iterator it=nodes[front].begin();
                it!=nodes[front].end(); ++it)
        {

            if(visited[*it]==false)
            {
                visited[*it]=true;
                que.push(*it);
            }
        }
       // cout<<endl;
    }
    cout<<endl;
    int Sz = sizeof(level)/sizeof(int);
    /*for(int i=0;i<=edges;i++)
    {
        cout<<"Level of "<<i<<"is "<<level[10]<<endl;
    }*/
    return 0;
}

[请注意代码末尾的注释部分。我尝试了一些方法但失败了。我删除了那些跟踪。请帮我更新代码。]

【问题讨论】:

    标签: c++ algorithm graph shortest-path breadth-first-search


    【解决方案1】:

    您可以使用此功能查找树中每个节点的级别。

    复杂度是 O(n),因为我们访问每个节点一次。

    祝你好运

    #define ll long long int
    ll level[100005],arr[100005];
    vector <ll> adj[100005];
    
    void bfs(ll s)
    {
         ll vis[100005];
         memset(vis,false,sizeof vis);
         queue <ll> q;
         q.push(s);
         level[s] = 1;
         vis[s] = true;
    
         while(!q.empty())
         {
             ll p = q.front();
             //cout<<p<<endl;
             q.pop();
    
             vector <ll>::iterator it;
             for(it=adj[p].begin();it!=adj[p].end();++it)
             {
                  if(vis[*it] == false)
                  {
                      level[*it] = level[p] + 1;
                      q.push(*it);
                      vis[*it] = true;
                  }
             }
         }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多