UVALive 6454 Lights Against Dudely dfs
来源:互联网 发布:北京润和软件 编辑:程序博客网 时间:2024/05/16 07:01
题意:给出n*m个屋子,其中‘.’为需要点亮的房间。每盏灯都放在可以点亮的房间,并且其可以点亮(x,y)、(x-1,y)、(x,y+1)的房间。有且仅有一盏灯可以旋转。‘.’房间 最多有15个。一定不能点亮‘#’的房间,求最少需要多少灯?
由于有效的房间最多15个,所以暴力dfs即可,当然状压枚举也行。这题题目太长,少看了一个条件wa到跪。。。
#include <iostream>#include<bits/stdc++.h>using namespace std;const int N=550;const int INF=11000000;int dir[4][2]={-1,0,0,1,1,0,0,-1};int n,m,ans,f,x[N],y[N],cnt,v[N][N];char s[N][N];void dfs(int t,int sum,int c);void dfs1(int t,int sum,int c,int d1){ int x1=x[t]+dir[d1][0],y1=y[t]+dir[d1][1]; int x2=x[t]+dir[(d1+1)%4][0],y2=y[t]+dir[(d1+1)%4][1]; if(!((x1<n&&x1>=0&&y1>=0&&y1<m&&s[x1][y1]=='#')||(x2<n&&x2>=0&&y2>=0&&y2<m&&s[x2][y2]=='#'))) { int flag1=1,flag2=1; if(x1<n&&x1>=0&&y1>=0&&y1<m&&v[x1][y1]==0) flag1=0; if(x2<n&&x2>=0&&y2>=0&&y2<m&&v[x2][y2]==0) flag2=0; if(!(v[x[t]][y[t]]&&flag1&&flag2))//如果操作必须至少能点亮一个房间,剪枝 { int cc=!flag1+!flag2+!v[x[t]][y[t]];//增加的点亮房间 v[x[t]][y[t]]=1; if(!flag1) v[x1][y1]=1; if(!flag2) v[x2][y2]=1; if(d1!=0) f=1; dfs(t+1,sum+1,c+cc); if(d1!=0) f=0; v[x[t]][y[t]]=0; if(!flag1) v[x1][y1]=0; if(!flag2) v[x2][y2]=0; } }}void dfs(int t,int sum,int c){ if(sum>=ans) return; if(c==cnt) { if(sum<ans) ans=sum; return ; } if(t==cnt) { if(c<cnt) return; if(sum<ans) ans=sum; return ; } dfs(t+1,sum,c); dfs1(t,sum,c,0); if(f==0) { for(int i=1;i<4;i++) dfs1(t,sum,c,i); }}int main(){ while(~scanf("%d%d",&n,&m)&&(n||m)) { cnt=0; for(int i=0;i<n;i++) { scanf("%s",s[i]); for(int j=0;j<m;j++) { if(s[i][j]=='.') { x[cnt]=i; y[cnt++]=j; } } } if(cnt==0) { printf("0\n"); continue; } ans=INF; f=0; dfs(0,0,0); if(ans>=INF) ans=-1; printf("%d\n",ans); }}
阅读全文
0 0
- UVALive 6454 Lights Against Dudely dfs
- BNUOJ 33992 Lights Against Dudely(dfs)
- 4770Lights Against Dudely
- hdu4770 Lights Against Dudely
- hdu 4770 Lights Against Dudely(暴力枚举dfs)
- hdu 4770 Lights Against Dudely(状态压缩dfs)
- hdu 4770 Lights Against Dudely
- HDU:4770 Lights Against Dudely
- HDU 4770 Lights Against Dudely
- hdu 4770 Lights Against Dudely
- hdu 4770 Lights Against Dudely
- HDU 4770 Lights Against Dudely
- HDU 4770 Lights Against Dudely
- HDU 4770 Lights Against Dudely
- hdu 4770 Lights Against Dudely
- HDOJ 4770 Lights Against Dudely
- hdu 4770 Lights Against Dudely
- hdu 4770 Lights Against Dudely
- 2017.6.24
- 同步/异步以及多线程
- 07_ARM汇编自学笔记指令系统之寻址方式
- eclipse下启动Tomcat失败,提示The Tomcat server configuration at \Servers\Tomcat v7.0 Server at localhost-con
- crond和crontab
- UVALive 6454 Lights Against Dudely dfs
- 添加页面
- windows10命令大全通用
- 1. 快速编译lk、kernel、vendor命令
- JS登录与注册验证
- 浅谈JS的面向对象
- Java final static abstract interface关键字介绍
- 关于如何理解TCP/IP协议栈的工作模式
- ColorMatrix(颜色滤镜)介绍和使用