![](/img/trans.png)
[英]How to convert a vector of int representing binary to and vector of int representing the decimal number? C++
[英]representing graph in c++ using vector<vector>
我試圖用c ++表示一個無向圖,然后用它們的neigbours打印頂點。 但是,當我無法理解這里的輸出時 -
#include <iostream>
#include <vector>
using namespace std;
int reach(vector<vector<int> > &adj) {
vector<vector<int> >::iterator it;
vector<int>::iterator i;
for (it = adj.begin(); it != adj.end(); ++it)
{
cout << (*(*it).begin()) << "outside"<< endl;
for (i = (*it).begin(); i != (*it).end(); ++i)
{
cout << (*i) << "inside" << endl;
}
}
return 0;
}
int main() {
size_t n, m;
cin >> n >> m;
vector<vector<int> > adj(n, vector<int>());
for (size_t i = 0; i < m; i++) {
int x, y;
cin >> x >> y;
adj[x - 1].push_back(y - 1);
adj[y - 1].push_back(x - 1);
}
cout << reach(adj);
}
外面意味着它是頂點,內部是它的鄰居。
for the input 3 2 1 2 2 3 output is-
1outside
1inside
0outside
0inside
2inside
1outside
1inside
為什么1次外面2次? 輸出不應該是
0outside
1inside
1outside
0inside
2inside
2outside
1inside
看來你的意圖是你的二維向量的第一個維度是第一個點的身份,第一個點所指向的所有第二個點,存儲在第二個維度中。
cout << (*(*it).begin()) << "outside"<< endl;
這不會打印迭代的第一個維度的值。 這將打印第二個維度的第一個值。 這就是你得到重復輸出的原因。
it
是包含第一個點的標識的向量的隨機訪問迭代器。 如果是這樣的話,
cout << (it-adj.begin()) << "outside"<< endl;
將對其指數進行逆向工程。 但這太混亂了。
使用外部的索引迭代和內部的范圍迭代來重寫整個事物更直接:
for (size_t i=0; i<adj.size(); ++i)
{
cout << i << "outside"<< endl;
for (auto j: adj[i])
cout << j << "inside" << endl;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.