這個題就是給你乙個只含有0和1的矩陣, 問你能否通過行列交換使得對角線上的元素全為1, 首先需要注意的是我們僅通過行交換或者列交換就可以使得矩陣滿足條件, 然後我們將行和列看成點, 矩陣中1的元素看成邊, 建立乙個有向圖, 求出行列的最大匹配數,即可。。**如下:
#include usingnamespace
std;
intn;
int mat[105][105
];int p[105]; //
第i列匹配的行
int vis[105
];bool dfs(int
u) }
return
false;}
int a[1000], b[1000
];int
cnt;
intmain()
memset(p, -1, sizeof
(p));
int pipei = 0
;
for(int i=1; i<=n; i++)
if(pipei !=n)
cnt = 0
;
for(int i=1; i<=n; i++) //
尋找 }
printf(
"%d\n
", cnt);
for(int i=0; i)
}return0;
}
HDU 2819 行列匹配 輸出解
題意 給你乙個矩陣,每個格仔是0或者1,每次操作可以任意交換兩行或者兩列,問是否可以使得主對角線的所有點都為1,如果沒有,則輸出 1,否則輸出交換操作。分析 行列匹配 暴力找解,只移動行或者列就行。include include include using namespace std const i...
hdu 2819 求最小頂點覆蓋數
和其他最小頂點覆蓋數題沒啥區別 唯一區別是求完之後要交換一下列或者行 將你求得的匹配行或者列交換一下再輸出就好 includeusing namespace std define max path 1000 define me a memset a,1,sizeof a int top,head m...
hdu2819 Swap 最大匹配數
題意 給定乙個n n的矩陣,格仔數字0或者1,通過交換兩行或兩列使對角線都是1。若不能,輸出 1 若可以,輸出交換次數,並且輸出交換的行或者列。如果某行或者某列全是0。那怎麼換都沒辦法的。否則,一定能換出來。這個動動腦子想一下可以明白的。其次要明確 只交換行或者只交換列都是可以換出來的。這個動動腦子...