题意就是讲在方格图中找到每个碉堡间都不相互破坏的最多碉堡存放数:

代码:

#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;
}

 

 

 

posted on 2012-07-26 10:23  xinmenghuairi  阅读(329)  评论(0编辑  收藏  举报