題目鏈結
題目要求用少的機械人訪問所有的點,也是說找最少的路徑訪問所有的點,也就是最小路徑覆蓋問題。
題目的關鍵是如何建圖,因為機械人只能向下走或者向右走,那麼就在當前的垃圾點所在的行往下,每一列出現的第乙個垃圾點之間建一條邊即可。
const int maxn = 25;
const int maxm = 25*25;
int g[maxn][maxn], nums, mp[maxm][maxm];
int a, b, vis[maxm], match[maxm];
void solve(int x, int y)
g[a][b] = ++nums;
while(cin >> a >> b && (a||b)) g[a][b] = ++nums;
for (int i = 1; ifor (int j = 1; jif (g[i][j]) solve(i, j);
int ans = nums;
for (int i = 1; i<=nums; ++i)
cout << ans << endl;
nums = 0; zero(g); zero(mp); zero(match);
} return 0;
}
POJ 1548 Robots(最小路徑覆蓋)
題目鏈結 題意 乍一看還以為是小白上那題dp,事實上不是,就是求一共幾個機械人能夠覆蓋全部路徑 思路 最小路徑覆蓋問題。乙個點假設在還有乙個點右下方,就建邊。然後跑最小路徑覆蓋就可以 include include include include using namespace std const ...
poj 1548最小路徑覆蓋
題目大意 給出乙個矩陣,從最左上點到最右下點走,並且只能往下走和往右走,在矩陣中的一些格仔中有含有乙個 g 問最少從最左上到最右下走多少次,能把所有的g都走到 解題思路 很明顯,要將所有的g都走到,這樣可以聯想到最小路徑匹配,然後就是怎麼建圖 建圖 對於任意兩個含有 g 的點,如果a點在b點的左上方...
POJ1548最小路徑覆蓋
題意 給你乙個dag,然後問你最少多少條路徑能覆蓋所有需要覆蓋的點。思路 最小路徑覆蓋,太明顯了,每個點向它右下方的點連邊,然後.沒啥難的地方,不說了。include include define n node 24 24 10 define n edge 24 24 24 24 100 typed...