4 .X.. .... XX.. .... 2 XX .X 3 .X. X.X .X. 3 ... .XX .XX 4 .... .... .... .... 0
5 1 5 2 4
#include <iostream> #include <string> #include <vector> #include <algorithm> #include <iterator> #include <utility> using namespace std; typedef pair<int,int> Point; int ans = 0; bool check(vector<string>& blockhouse,Point p){ for(int i = p.first; i>=0; --i){ if(blockhouse[i][p.second] == ‘X‘) break; if(blockhouse[i][p.second] == ‘*‘) return false; } for(int i = p.second; i >= 0; -- i){ if(blockhouse[p.first][i] == ‘X‘) break; if(blockhouse[p.first][i] == ‘*‘) return false; } return true; } void dfs(vector<string>& blockhouse,Point pos,int sum ){ int n = blockhouse.size(); if(ans < sum) ans = sum; if(pos.second == n) {pos.first++;pos.second =0;} if(pos.first == n && pos.second == 0) return; if(blockhouse[pos.first][pos.second] == ‘X‘) dfs(blockhouse,Point(pos.first,pos.second+1),sum); else{ if(check(blockhouse, pos)) { blockhouse[pos.first][pos.second] =‘*‘; dfs(blockhouse,Point(pos.first,pos.second+1),sum+1); blockhouse[pos.first][pos.second] = ‘.‘; } dfs(blockhouse,Point(pos.first,pos.second+1),sum); } } int main(){ int n; while(cin >> n && n){ vector<string> blockhouse(n); for(int i = 0; i < n ; ++ i) cin >> blockhouse[i]; ans = 0; dfs(blockhouse,Point(0,0),0); cout<< ans<<endl; } }
ACM blockhouses,布布扣,bubuko.com
原文:http://www.cnblogs.com/xiongqiangcs/p/3692032.html