poj2965
来源:互联网 发布:阴阳师御灵强化数据 编辑:程序博客网 时间:2024/05/22 13:20
题意,门锁住了,要打开,+代表关闭,-代表打开,DFS枚举所有情况,找最优解。(然而对我来说这并不容易)
题题题
咸鱼开始表演。
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int map[10][10],flag=0,ans;struct bbq{ int x,y;};bbq a[20];void change(int x,int y)//把xy的行列全部翻过来{ map[x][y]=!map[x][y]; for(int i=1; i<=4; i++) { map[x][i]=!map[x][i]; map[i][y]=!map[i][y]; }}int judge()//判断是否全部打开{ for(int i=1; i<=4; i++) { for(int j=1; j<=4; j++) { if(map[i][j]==0) return 0; } } return 1;}void dfs(int x,int y,int t){ if(t==ans)//ans是步数,即在这些步里能不能有解,最大是16 { flag=judge(); return ; } if(flag||y>=5)//这里是y》=5,因为下面对x做了约束,这里要约束y。 { return ; } /*int xx=x+(y+1)/5;这里还没有解决 int yy=(y+1)%5; change(x,y); dfs(xx,yy,t+1); a[t].x=x; a[t].y=y; change(x,y); dfs(xx,yy,t);*/ change(x,y);//把xy翻过来的情况 if(x<4) { dfs(x+1,y,t+1); a[t].x=x; a[t].y=y; } else { dfs(1,y+1,t+1); a[t].x=x; a[t].y=y; } change(x,y);//再把xy翻回来 if(x<4) { dfs(x+1,y,t); } else { dfs(1,y+1,t); }}int main(){ int i,j; char str;//注意要从1,1开始 for (i = 1; i <= 4; ++i) { for (j = 1; j <= 4; ++j) { scanf("%c", &str); if (str == '-') { map[i][j] = 1; } else { map[i][j] = 0; } } getchar();//度掉回车 } flag=0; for(int i=0; i<=16; i++) { ans=i;//枚举ans dfs(1,1,0); if(flag) { break; } } if(flag) { printf("%d\n",ans); for(int i=0; i<ans; i++) { printf("%d %d\n",a[i].x,a[i].y); } }}//WA了无数遍,蓝瘦
0 0
- POJ2965
- poj2965
- poj2965
- POJ2965
- poj2965
- poj2965
- poj2965
- POJ2965
- POJ2965
- poj2965
- poj2965
- POJ2965
- POJ2965
- POJ2965
- poj2965
- POJ2965
- poj2965
- poj2965
- 30问
- 扩展欧几里得算法
- Hibernate_在应用程序中使用的Session的管理方案
- 学习MVC之租房网站(八)- 前台注册和登录
- samba服务配置
- poj2965
- 学习《OpenCV 2 计算机视觉编程手册》第二章遍历图像和领域操作实例——对图像进行锐化
- ecnu 丽娃河的狼人传说
- 请一定告诉孩子,为什么要读书?
- CSS3在各浏览器上的属性前缀
- Android 实现通知栏通知APP版本更新
- mysql基础(二)
- C#连接MySql和Sql数据库
- startx 及xinit 介绍