最小圈基問題

2021-07-10 17:04:47 字數 2457 閱讀 3905

#include#include#includeusing namespace std;

static int temp = 0;//在找圈方法中用於圈個數的計數

class circle

int getcircleweight() //計算並返回圈的權

return circleweight;

}public:

int vertexnum; //圈的頂點數

vectorcircleedge; //二維陣列儲存邊的權

int circleweight; //圈的權值

pair*vertex; //儲存圈的邊的座標

};class matrixgraphic

matrixgraphic(int vernumber, int edgnumber)

;void matrixgraphic::cingraphic()

/*儲存圖的邊的座標*/

for (int i = 0; i < vertexnum; i++)

for (int j = i; j < vertexnum; j++)

}}/*用組合演算法找出n個頂點的所有組合(不考慮位置)

num1為圖的頂點個數,num2為組合的頂點個數,b為所有組合構成的集合

*/void matrixgraphic::fundcircle(int num1, int num2,int num3, vector> b)

else

circlenum += 1;

circle[temp].vertexnum = b.size();

++temp;}}

}}/*判斷是否構成圈思路:

(1)n條邊能組合成圈的頂點只有n個

(2)所有邊的座標點的集合都是成對出現的,如(01 03 12 23中0 1 2 3都是成對出現的)

(3)*/

bool matrixgraphic::iscircle(int num, vector> b)

for (int i = 0; i < b.size(); i++)

for (int i = 0; i < b.size(); i++)

/*n條邊能組合成圈的頂點只有n個,且都是成對出現的(有且只有兩個)*/

for (int i = 0; i < b.size() * 2; i++)

if (n > 2)

return false;

else

}if (s2.size() == num && s0.size() == (num - 1) && s1.size() == (num - 1) )

return true;

else

return false;

}/*找最小圈基的思路:

對排好序的圈挨個放進圈基,如果圈是圈基的線性組合(即圈的所有邊在圈基中都可以找到),刪掉

直到圈基中圈的個數滿足要求停止加圈

*/int matrixgraphic::fundmincircle()

else

}temp = 0;

for (int j = 0; j < circle[i].vertexnum; j++)//檢驗第i是否是組合成的,分別掃瞄它的所有頂點

}if (temp != circle[i].vertexnum)

if (temp1 == (mixcirclenum))

break;

myset.clear();

} } for (int i = 0; i < mixcirclenum; i++)

/*輸出最小圈基*/

cout <> e >> v;

matrixgraphic mygraphic(e,v); //定義乙個圖物件

mygraphic.cingraphic(); //呼叫cingraphic()方法,以鄰接矩陣的形式輸入整個圖

//找到所有的圈

/*找圈的思路:

(1)3個或3個以上的頂點可構成圈,找出可以構成圈的所有可能的頂點組合

(2)從找出的組合中再篩選出真正能構成圈的

*/ for (int i = 3; i <= v; i++)

cout << "輸出圖中所有圈的權:" << endl;

for (int i = 0; i < mygraphic.circlenum; i++)

/*對所有圈按照公升序排列*/

circle mycircl;

for (int i = 0; i < mygraphic.circlenum - 1; i++) }

cout << endl;

cout << "排序後的圈的權:" << endl;

for (int i = 0; i < mygraphic.circlenum; i++)

cout<

洛谷 P3199 HNOI2009 最小圈

如果你能提供題面或者題意簡述,請直接在討論區發帖,感謝你的貢獻。對於一張有向圖,要你求圖中最小圈的平均值最小是多少,即若乙個圈經過k個節點,那麼乙個圈的平均值為圈上k條邊權的和除以k,現要求其中的最小值 輸入格式 第一行2個正整數,分別為n和m 以下m行,每行3個數,表示邊連線的資訊,輸出格式 一行...

HNOI2009 最小圈 二分答案 負環

考慮帶權的有向圖 g v,e 以及 w e rightarrow r 每條邊 e i,j i neq j,i in v,j in v 的權值定義為 w 令 n v c c 1,c 2,cdots,c k c i in v 是 g 中的乙個圈當且僅當 c i,c 1 le i lt k 和 c k,c...

線性基基礎問題

大佬的部落格 假設有n個數,這n個數能組成的異或和的集合為v,線性基就是能表示這個異或和集合v的最小集合。線性基的作用 求解異或和第k小 異或和最大值 某個數是否存在於異或和集合裡等問題。洛谷p3812 求異或和的最大值 include using namespace std const int m...