#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...