Fire Net HDU 1045

时间:2014-06-04 20:43:04   收藏:0   阅读:270

简单深搜,可以完全暴力,不会超时的。

bubuko.com,布布扣
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
#define MAX(a,b) (a>b?a:b) 
char maze[10][10];
int n, maxn;

void DFS(int step,int count);
int cheak(int x, int y);
int main()
{
    int i;
    while(scanf("%d",&n), n)
    {
        maxn = 0;
        for(i = 0; i < n; i++)
            scanf("%s",maze[i]);
        DFS(0,0);
        printf("%d\n",maxn);
    }
    return 0;
}

void DFS(int step,int count)
{
    int x, y;
    maxn = MAX(maxn,count);
    if(step == n*n)
        return ;
    x = step/n;
    y = step%n;
    if(maze[x][y] == . && cheak(x,y))
    {
        maze[x][y] = O;
        DFS(step+1,count+1);
        maze[x][y] = .;
    }
    DFS(step + 1, count);
}

int cheak(int x, int y)
{
    int i;
    for(i = x-1; i >= 0; i--)
    {
        if(maze[i][y] == O)
            return 0;
        else if(maze[i][y] == X)
            break;
    }
    for(i = y-1; i >= 0; i--)
    {
        if(maze[x][i] == O)
            return 0;
        else if(maze[x][i] == X)
            break;
    }
    return 1;
}
bubuko.com,布布扣

 

Fire Net HDU 1045,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!