起始的时候是按照上下左右进行搜索的,然后不幸栈溢出。参考别人的实现才发现,原来迷宫还可以以索引为深度进行搜索。更改之后果断AC。由于搜索的时候是自左而右、自上而下的放置的,所以判断是否可以放置时,只需要判断左上的部分即可。

#include <stdio.h>
char maze[6][6];
int num,result;
bool placeable(int row,int col)
{
    int i;
    i=col-1;
    while(i>=0&&maze[row][i]!='X')
        if(maze[row][i--]=='*') return false;
    i=row-1;
    while(i>=0&&maze[i][col]!='X')
        if(maze[i--][col]=='*') return false;
    return true;
}
void dfs(int cnt,int max)
{
    int row,col;
    if(cnt==num*num)
    {
        max>result?result=max:1;
        return;
    }
    else
    {
        row=cnt/num;
        col=cnt%num;
        if(maze[row][col]=='.'&&placeable(row,col))
        {
            maze[row][col]='*';
            dfs(cnt+1,max+1);
            maze[row][col]='.';
        }
        dfs(cnt+1,max);
    }
}
int main()
{
    //freopen("Fire Net.txt","r",stdin);
    while(scanf("%d",&num)!=EOF&&num)
    {
        for(int i=0;i<num;i++)
            scanf("%s",maze[i]);
        result=0;
        dfs(0,0);
        printf("%d\n",result);
    }
    return 0;
}

相关文章: