【C++】隣接リストで実装したグラフ(木)について,点に対応している配列の値の更新

前提

【言語】C++

実現したいこと

隣接リストで実装したグラフ(木)について,「パスの中間Mを見つけ,中間Mよりも根に近い点は子の(元のグラフでの)値を全て足す」ということを実現したいです.画像のようなことを考えています.

イメージ説明

グラフには点ごとに値が記録されている.(頂点番号aに対してvector cM[a]に値を格納)
点aの根からの距離をvector d[a]に格納.

アイデアをお持ちの方いらっしゃいましたら,どうかご教授のほどよろしくお願いします.

試したこと

深さ優先探索で辿って,葉をみつけて操作すれば…と考えていたのですがうまくいかず
(配列が2次元になっていますが気にしないでください)

function.cpp

void DELTA(vector<bool> &seen,int s,const Graph &G, int v,vector<vector<double>> &cM,vector<vector<double>> &d,double M) { seen[v] = true; // v から行ける各頂点 next_v について for (auto next_v : G.adjList[v]) { if (seen[next_v] == true){ cout << "点" << next_v << "は探索済み" << endl; if (M > 0 && d[s][next_v] < 2) { cM[s][next_v] = cM[s][next_v] + cM[s][v]; } }else{ cout << "点" << next_v << "は未探索点" << endl; if (G.adjList[next_v].size() == 1) { cout << next_v << "は葉である" << endl; M = d[s][next_v]/2; } DELTA(seen,s,G, next_v,cM,d,K,STACK,M2); } } }

コメントを投稿

0 コメント