私は、stlを使ってC++で(見かけ上単純な)無向グラフ表現に苦労しています。 次のように通常は、私はベクトルの単純な配列を使用してグラフを保存します:与えられたグラフを等価形式に効率的に縮小して表現する方法は?
#include <iostream>
#include <vectors>
#define NODES 10
using namespace std;
int main(){
vector<pair<int, int>> graph[NODES];
int u,v, weight;
for(int i=0;i<10;i++){
cin>>u>>v>>weight;
graph[u].push_back(make_pair(v,weight));
graph[v].push_back(make_pair(u,weight));
}
return 0;
}
をしかし、私はそれが困難な以下のシナリオのグラフを保存するために探しています:では
上のグラフでは、私は2種類のエッジa
とb
を持っています。端に隣接する頂点b
は、同等のものと見なされます。したがって、これらの2つの頂点(この場合は2
& 6
)は同等であり、それらをマージして1つとして表現する必要があります。
はしたがって、私は以下に示すように上記のグラフを削減し、格納したい:
注:削減しながら、時にはそれがいくつかのプロパティを侵害することが起こるかもしれません。エッジ1-6と2-6両方ラベルb
と1-2を持っている場合、例えば、維持する一つのa
は、それが曖昧になるラベルを有します。そのようなシナリオでは、グラフを検出してグラフが有効でないことを報告するにはどうすればよいですか?ベクトルの二つの配列は、その後、クロスチェックのようなものがそうであるように
これまでのところ、私はa
とb
ラベルを格納することを考えていますが別々にエッジ。しかし、これはコード作成が非常に複雑で非常に面倒で、おそらくコード全体の複雑さが増します。
ご協力いただければ幸いです。ありがとう。
この質問[Computer Science](https://cs.stackexchange.com/)に適しているかもしれません。 – Ron
ありがとうございます。これを推奨リンクに移行する方法はありますか?私はstackexchangeの投稿を移行していないので、この質問の移行方法はわかりません。 – user3243499
私は移行についてはわかりませんが、クロス投稿を避けるべきだと私は知っています。おそらくこれを削除し、そこに新しいものを投稿しますか? – Ron