题意就是讲在方格图中找到每个碉堡间都不相互破坏的最多碉堡存放数:
代码:
#include<iostream> using namespace std; char map[4][4]; int ibest,n; bool panduan(int c,int r) { int i; for(i=c-1;i>=0;i--) { if(map[i][r]=='o') return false; if(map[i][r]=='X') break; } for(i=r-1;i>=0;i--) { if(map[c][i]=='o') return false; if(map[c][i]=='X') break; } return true; } void solve(int k,int ibiao) { int x,y; if(k>=n*n) { if(ibiao>ibest) { ibest=ibiao; return; } } else { x=k/n; y=k%n; if(map[x][y]=='.' && panduan(x,y)) { map[x][y]='o'; solve(k+1,ibiao+1); map[x][y]='.'; } solve(k+1,ibiao); } } int main() { int i,j; while(cin>>n&&n) { for(i=0;i<n;i++) for(j=0;j<n;j++) cin>>map[i][j]; ibest=0; solve(0,0); cout<<ibest<<endl; } return 0; }