ZOJ-1002 Fire Net

来源:互联网 发布:js创建json数组对象 编辑:程序博客网 时间:2024/06/06 02:48

//这道题太经典了,刚开始还不晓得怎么做,然后看看解题报告,秒懂。。。。。,很难想到的就是以k从1到n*n递增,k/n表示x轴坐标,k%n表示y轴坐标。

AC代码:

#include<stdio.h>#include<string.h>#define max 12char map[max][max];int n,sum;int can(int x,int y){    int i;    for(i=x-1;i>=0;i--)    {        if(map[i][y]=='O')        {            return 0;        }        if(map[i][y]=='X')        {            break;        }    }    for(i=y-1;i>=0;i--)    {        if(map[x][i]=='O')        {            return 0;        }        if(map[x][i]=='X')        {            break;        }    }    return 1;}void dfs(int k,int min){    if(k==n*n)    {        if(min>sum)        {            sum=min;            return;        }    }    else    {        int x=k/n;        int y=k%n;        if(map[x][y]=='.'&&can(x,y))        {            map[x][y]='O';            dfs(k+1,min+1);            map[x][y]='.';        }        dfs(k+1,min);    }}int main(){    while(scanf("%d",&n)!=EOF&&n)    {        int i;        for(i=0;i<n;i++)        {            scanf("%s",map[i]);        }        sum=0;        dfs(0,0);        printf("%d\n",sum);    }    return 0;}

0 0