题目:http://codeforces.com/group/xrTA2IaQje/contest/253013/problem/D
题意:最少破环几个格子使之不能从(1,1)到(n,m)
思路:两次dfs即可
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6+5;
int n, m, vis[maxn];
string Map[maxn]; int flag=0;
void dfs(int x, int y){
if(x>=n || y>=m || Map[x][y] == '#' || vis[x*m+y]) return ;
vis[x*m+y] = 1;
if(x == n-1 && y == m-1) {flag = 1; return ;}
if(!flag) dfs(x+1, y);
if(!flag) dfs(x, y+1);
}
int main()
{
cin >> n >> m;
for(int i=0; i<n; i++) cin >> Map[i];
dfs(0, 0);
if(!flag) puts("0");
else {
vis[0] = vis[n*m-1] = flag = 0;
dfs(0, 0);
cout << flag+1 << endl;
}
}