int main() { while (scanf("%d", &n) != EOF) { gg.init(n + 3); int supernode = n; int source = n + 1; int dest = source + 1; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { scanf("%d", C[i] + j); if (i != j) { gg.add(i, j, 1, C[i][j]); } } } for (int i = 1; i < n; i++) { gg.add(i, supernode, 1, C[i][0]); gg.add(supernode, i - 1, 1, C[n - 1][i - 1]); } gg.add(source, 0, 1, 0); gg.add(n - 1, dest, 1, 0); printf("%d\n",gg.MF(source, dest)); } }
int main() { int n, m; ios::sync_with_stdio(false); while(cin >> n >> m) { MCMF MF; if (n == 0 && m == 0) { break; } int S = n * m + 1; int T = S + 1; int tot = T + 1; MF.init(tot); for (int i = 0; i < n; i++) { cin >> grid[i]; for(int j = 0; j < m; j++) { if (grid[i][j] == 'm') { MF.add(S, i * m + j + 1, 1, 0); // cout <<"m "; } else if (grid[i][j] == 'H') { MF.add(i * m + j+1, T, 1, 0); // cout <<"eiwgo"; } for (int d = 0; d < 4; d++) { int tx = i + dx[d]; int ty = j + dy[d]; if (tx >= 0 && tx < n && ty >= 0 && ty < m) { MF.add(i * m + j+1, tx * m + ty+1, inf,1); //cout <<"addege"; } } } } cout << MF.mincost(S, T) << endl; } }