uva11214 Guarding the Chessboard
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=100945#problem/A
#include#define REP(i,a,b) for(int i=a;i<=b;i++)#define MS0(a) memset(a,0,sizeof(a))#define PII pair using namespace std;typedef long long ll;const int maxn=1000100;const int INF=(1<<29);int n,m;char ch[12][12];int id[12][12];PII X[maxn];int cnt;bool put[12][12];vector Put(int x,int y){ vector res; REP(i,1,n){ if(put[i][y]==0){ put[i][y]=1; res.push_back({i,y}); } } REP(i,1,m){ if(put[x][i]==0){ put[x][i]=1; res.push_back({x,i}); } } REP(i,1,n){ int j=x+y-i; if(j>=1&&j<=m&&put[i][j]==0){ put[i][j]=1;res.push_back({i,j}); } j=i-(x-y); if(j>=1&&j<=m&&put[i][j]==0){ put[i][j]=1;res.push_back({i,j}); } } return res;}void Put_pre(vector v){ for(int i=0;i v=Put(x,i); if(dfs(x,i,cur+1,maxd)) return 1; Put_pre(v); } REP(i,x+1,n){ REP(j,1,m){ vector v=Put(i,j); if(dfs(i,j,cur+1,maxd)) return 1; Put_pre(v); } } return 0;}int main(){ freopen("in.txt","r",stdin); int casen=1; while(cin>>n,n){ cin>>m; cnt=0;MS0(id); REP(i,1,n){ REP(j,1,m){ cin>>ch[i][j]; if(ch[i][j]=='X') id[i][j]=++cnt,X[cnt]={i,j}; } } int ans=INF; for(int i=0;;i++){ //cout< <