hdu 杭电 1045 Fire Net 果枫

题意:地图中最多能放多少炮台。

解法:深搜。

ac代码:

View Code
#include<iostream>
using namespace std;


char map[8][8];
int sum,maxi,n;


bool check(int x,int y)
{
    if(map[x][y]=='X')return 0;
    int i;
    for(i=x-1;i>=0;i--)
    {
        if(map[i][y]=='X')break;
        if(map[i][y]=='0')return 0;
    }

    for(i=y-1;i>=0;i--)
    {
        if(map[x][i]=='X')break;
        if(map[x][i]=='0')return 0;
    }

    return 1;
}


void dfs(int num,int sum)
{
    if(num==n*n)
    {
        if(maxi<sum) 
            maxi=sum;
        return ;
    }

    int x=num/n;
    int y=num%n;
    if(check(x,y))
    {
        map[x][y]='0';
        dfs(num+1,sum+1);
        map[x][y]='.';
    }
    dfs(num+1,sum);
}



int main()
{
    while(cin>>n,n)
    {

        int i,j;
        for(i=0;i<n;i++)
            for(j=0;j<n;j++)
                cin>>map[i][j];

        memset(co,0,sizeof(co));
        memset(ro,0,sizeof(ro));
        memset(use,0,sizeof(use));

        sum=0;
        maxi=0;
        dfs(0,0);

        cout<<maxi<<endl;
    }
    return 0;
}
/*
4
.X..
....
XX..
....
4
.X.X
X.X.
.X.X
X.X.
3
...
...
...
3
X..
.X.
..X
4
X.X.
.X.X
X.X.
.X.X
2
XX
.X
3
.X.
X.X
.X.
3
...
.XX
.XX
4
....
....
....
....
2
..
..
2
XX
X.
2
.X
.X
2
..
XX
2
XX
..
*/
原文地址:https://www.cnblogs.com/zgfailmr/p/2666313.html