POJ3279 搜索
来源:互联网 发布:mac iphoto无法更新 编辑:程序博客网 时间:2024/05/14 16:04
这道题目是不能靠纯暴力的搜索解决的。因为每个位置都可能翻转或不翻转,那么可能的状态数有2^(N*M)个,暴力搜复杂度过高。
仔细观察它的性质可知,只要确定了某一行每个位置是否翻转,那么它相邻行每个位置只与已知行的一个数字相关,那么相邻行的翻转情况完全确定,再扩展开来,整个矩阵都会确定下来,因此只需枚举其中一行来搜索即可。
暴力搜索的代码:
#include <cmath>#include<queue>#include <cstring>#include <cstdio>#include <map>#include <iostream>#include <vector>#include<cmath>#define rep(i,a,n) for(int i=a;i<=n;i++)using namespace std;struct status{ int Map[17][17]; int ope[17][17]; int step;};int main(){ int m,n; while(cin>>m>>n) { int ori[17][17]; rep(i,1,m) { rep(j,1,n) { cin>>ori[i][j]; } } queue<status>que; while(!que.empty())que.pop(); status s; rep(i,1,m) { rep(j,1,n) { s.Map[i][j]=ori[i][j]; s.ope[i][j]=0; } } s.step=0; que.push(s); status fin; int flag=0; while(!que.empty()) { cout<<1; status now; now=que.front(); que.pop(); rep(i,1,m) { rep(j,1,n) { if(now.Map[i][j]!=0)flag=1; } } if(!flag) { fin=now; break; } rep(i,1,m) { rep(j,1,n) { status t; t=now; t.Map[i][j]==0?1:0; t.ope[i][j]++; que.push(t); } } } rep(i,1,m) { rep(j,1,n) { cout<<fin.ope[i][j]<<' '; } cout<<endl; } }}
这样的代码一定会超时。只需简单改动,只搜第一行即可。
0 0
- POJ3279 搜索
- [搜索]poj3279 fliptile
- poj3279 Fliptile (dfs搜索)
- poj3279 (搜索,好题**)
- poj3279
- POJ3279
- poj3279
- poj3279 kuangbin带你飞 搜索 Fliptile
- POJ3279 Fliptile题解 二进制枚举搜索法
- [kuangbin带你飞]专题一 简单搜索 D poj3279
- D - Fliptile POJ3279 搜索(反转开关经典问题,二进制表示集合)
- poj3279 翻转
- POJ3279【枚举】
- POJ3279 Fliptile
- POJ3279 Fliptile
- POJ3279-Fliptile
- poj3279 Fliptile
- poj3279 Fliptile
- java设计模式之---------------单例模式
- MySQL中 truncate 、delete与drop区别
- java学习笔记(二十一)正则表达式
- 基于 Django1.10 文档的深入学习(12)—— django.shortcuts 之 redirect()
- 201604-3 路径解析 80
- POJ3279 搜索
- AD.c
- Angular快速入门3--指令
- UVA------439
- Nginx的反向代理
- 制作帮助文档、利用api文档学习工具类使用、代码块、继承及继承的注意点
- 湖北民族学院oj(dfs+枚举) 之 彩票
- 杭电 搜索 1253 胜利大逃亡
- 在ROS下使用RS232串口读取LSM200激光测距仪数据的具体步骤