[蓝桥杯]算法提高 vertex cover(dfs)
問題描述
給定一個N個點M條邊的無向圖G(點的編號從1至N),問是否存在一個不超過K個點的集合S,使得G中的每條邊都至少有一個點在集合S中。
輸入格式
輸入的第一行包含一個整數T,表示數據的組數。
接下來T組數據中:每組輸入的第一行包含三個整數n, m, k,分別表示圖的點數,邊數,集合點數的最大值。接下來m行,每行2個正整數x,y,表示編號為 x 的節點與編號為 y 的節點間有一條邊相連。
輸出格式
對于每組測試數據,若其存在解,則將解輸出出來:第一行為一個整數t,表示所選點集的大小;第二行為t個整數,表示所選的點的編號。如果存在多組解,只要輸出其中一種方案即可(會有special judge程序對你的輸出進行檢查)。
若該組測試數據不包含解,則輸出一個數-1(一行)。
樣例輸入
2
10 8 3
6 4
7 2
7 4
7 6
9 3
9 5
10 6
10 9
10 8 2
6 4
7 2
7 4
7 6
9 3
9 5
10 6
10 9
樣例輸出
3
6 7 9
-1
數據規模和約定
對于80%的數據,滿足 0<n<=20, m<=200, k<=20。
所有的數據滿足 0<n<=100, m<=5000, k<=20。
思路:這個題目沒有想到挺好的方法,就是暴力搜索。但是這個題目的數據量并沒有它所說的那么大,所以就過了。如果有好的方法,希望路過的大佬可以指正。
代碼如下:
努力加油a啊,(o)/~
總結
以上是生活随笔為你收集整理的[蓝桥杯]算法提高 vertex cover(dfs)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mavlink协议解析_jlink 串口
- 下一篇: iptable 详解_iptable命令