#hdu4770# #2013杭州现场赛# A:Lights Against Dudely

来源:互联网 发布:软件评测中心招聘 编辑:程序博客网 时间:2024/05/16 13:00

水。只是坑了一点。。不解释。。。



#include<iostream>#include <cstring>#include <cstdio>#include <cmath>#include <cstdlib>#include<algorithm>#define LL long longusing namespace std;char s[222][222];int n,m,d,dir[4][2]={1,0,-1,0,0,1,0,-1};int vis[222][222];struct point{    int x,y;}p[16];bool bg(int x,int y,int k,int t)//变更{    int dir[4][2]={-1,1,1,-1,1,1,-1,-1};    if(s[x][y]!='.') return 0;    if(x+dir[k][0]>=0 && x+dir[k][0]<n && s[x+dir[k][0]][y]!='.') return 0;    if(y+dir[k][1]>=0 && y+dir[k][1]<m && s[x][y+dir[k][1]]!='.') return 0;    vis[x][y]+=t;    if(x+dir[k][0]>=0) vis[x+dir[k][0]][y]+=t;    if(y+dir[k][1]>=0) vis[x][y+dir[k][1]]+=t;    return 1;}int solve(int x,int ans,int k){    int mina=20,i,j;    if(x==d)    {        for(i=0;i<d;i++) if(vis[p[i].x][p[i].y]==0) return 20;        return ans;    }    mina=min(mina,solve(x+1,ans,k));    if(bg(p[x].x,p[x].y,0,1))    {        mina=min(mina,solve(x+1,ans+1,k));        bg(p[x].x,p[x].y,0,-1);    }    if(k)    {        for(i=1;i<4;i++)        {            if(bg(p[x].x,p[x].y,i,1))            {                mina=min(mina,solve(x+1,ans+1,0));                bg(p[x].x,p[x].y,i,-1);            }        }    }    return mina;}int main(){    while(cin>>n>>m)    {        if(n==0 && m==0) break;        int i,j,k;        d=0;        for(i=0;i<n;i++)        {            for(j=0;j<m;j++)            {                cin>>s[i][j];                if(s[i][j]=='.')                {                    p[d].x=i;                    p[d].y=j;                    d++;                }            }        }        memset(vis,0,sizeof(vis));        int ans=solve(0,0,1);        if(ans<=17)            cout<<ans<<endl;        else            puts("-1");    }    return 0;}


原创粉丝点击