Why is my for loop giving error : X does not name a type

Why is my for loop giving error : X does not name a type

谁能告诉我,当我使用 for 循环获取级别 'it' 中存储的节点数时,为什么它不起作用?

请告诉我可以通过基于范围的 for 循环访问向量的其他方法。

// A simple representation of graph using STL 
#include<iostream>
#include<vector>
using namespace std;

// A utility function to add an edge in an 
// undirected graph. 
void addEdge(vector<int> adj[], int u, int v) 
{ 
    adj[u].push_back(v); 
    adj[v].push_back(u); 
} 


void printNodes(vector<int> adj[], int n) 
{ int count=0;
        for (auto x : adj[n]){
            count++;
        } 
        cout<<count;

} 

// Driver code 
int main() 
{ 

int V,x,y;
cin>>V;

    vector<int> adj[V+1]; 

    for(int i=0;i<V-1;i++){
        cin>>x>>y;
    addEdge(adj, x, y); 
}
    int it;
    cin>>it;
    printNodes(adj, it); 
    return 0; 
} 

你的问题是循环输入的停止条件

 for (int i = 0; i < V; i++) {
     cin >> x >> y;
     addEdge(adj, x, y);
 }

你运行高达V -1(在网站上的例子中V=20) 但是你没有 Index 20 因为 insex 开始为 0 因此,当您尝试访问单元格 20 时,索引为 0-19,您会收到信号错误。

你必须选择如何解决这个问题 1) 循环

 for (int i = 0; i < V-1; i++)

或设置向量vector<int> adj[V+1];

下次尝试使用调试器,它会帮助您立即发现问题

首先,您的方法中缺少一些东西:

  1. 您在图中添加边没有输入,我假设 V 仅用于顶点。
  2. 每当您想检查特定级别中的节点数时您应该始终提及起点。因为不同的起点可能会导致图中的不同输出,而该图不像树那样有根。
  3. 如果顶点数是V,那么向量应该是vector adj[V+1],如果你想要你的顶点为 1 索引。

所以这是最终代码:

#include<iostream>
#include<vector>
#include<queue>
using namespace std;


int nodes_at_level[10];
// Taken from hackerearth.....


    int level[10]; //To determine the level of each node
    bool vis[10]; //Mark the node if visited 

    void bfs(int s,vector<int> adj[]) {
        queue <int> q;
        q.push(s);
        level[ s ] = 0 ;  //Setting the level of the source node as 0
        nodes_at_level[level[s]]++;
        vis[ s ] = true;
        while(!q.empty())
        {
            int p = q.front();
            q.pop();
            for(int i = 0;i < adj[ p ].size() ; i++)
            {
                if(vis[ adj[ p ][ i ] ] == false)
                {
            //Setting the level of each node with an increment in the level of parent node
                    level[ adj[ p ][ i ] ] = level[ p ]+1;

                    nodes_at_level[level[ adj[ p ][ i ] ]]++;

                     q.push(adj[ p ][ i ]);
                     vis[ adj[ p ][ i ] ] = true;
                }
            }
        }
    }

void addEdge(vector<int> adj[], int u, int v)
{
    adj[u].push_back(v);
    adj[v].push_back(u);
}

//to print the number of nodes in the level 'it'
void printNodes(vector<int> adj[], int n)
{
    int count = 0;
    count = nodes_at_level[n];
    cout << count;
}

// Driver code 
int main()
{
    int V, x, y ,E;
    cin >> E;
    cin >> V;

    vector<int> adj[V+1];

    for (int i = 0; i < E; i++) {
        cin >> x >> y;
        addEdge(adj, x, y);
    }
    bfs(1,adj);  //assuming the start of the graph to be 1 

    int it;
    cin >> it;
    printNodes(adj, it);
    return 0;
}

hackerearth 问题我已经看到了。但只是试图解决你的问题。

但是,如果你无论如何都想要 for 循环,那么试试这个...我只是根据它们的级别存储顶点..

vector<int> nodes_at_level[10];
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

// Taken from hackerearth.....


    int level[10];              //To determine the level of each node
    bool vis[10];               //Mark the node if visited 

    void bfs(int s,vector<int> adj[]) {
        queue <int> q;
        q.push(s);
        level[ s ] = 0 ;  //Setting the level of the source node as 0
        nodes_at_level[level[s]].push_back(s);
        vis[ s ] = true;
        while(!q.empty())
        {
            int p = q.front();
            q.pop();
            for(int i = 0;i < adj[ p ].size() ; i++)
            {
                if(vis[ adj[ p ][ i ] ] == false)
                {
                    //Setting the level of each node with an increment in the level of parent node
                    level[ adj[ p ][ i ] ] = level[ p ]+1;

                    nodes_at_level[level[ adj[ p ][ i ] ]].push_back(adj[p][i]);
                    //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                     q.push(adj[ p ][ i ]);
                     vis[ adj[ p ][ i ] ] = true;
                }
            }
        }
    }

//to print the number of nodes in the level 'it'
void printNodes(vector<int> adj[], int n)
{
    int count=0;
        for (auto x : nodes_at_level[n]){
            count++;
        } 
        cout<<count;
}

希望对您有所帮助。