POJ2222+暴力搜索
一共2^15个状态
比较简单
/*
2^15 states
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std; const int maxn = ;
const int inf = ;
const int dx[]={,,,-,,-,,-};
const int dy[]={,-,,,-,,,-};
char mat[ ][ ];
struct Node{
int x,y;
char ch;
bool flag;
}node[ ];
int vis[ ]; bool in( int x,int y,int n,int m ){
if( x>=&&x<n&&y>=&&y<m ) return true;
else return false;
} bool ok_k( int x,int y,int n,int m ){
for( int i=;i<;i++ ){
int tx = x+dx[i];
int ty = y+dy[i];
if( in(tx,ty,n,m)==true ) {
if( mat[tx][ty]!='E' )
return false;
}
}
return true;
}
bool ok_q( int x,int y,int n,int m ){
for( int i=;i<=;i++ ){
for( int k=;k<;k++ ){
int tx = x+i*dx[k];
int ty = y+i*dy[k];
if( in(tx,ty,n,m)==true ){
if( mat[tx][ty]!='E' )
return false;
}
}
}
return true;
}
bool ok_b( int x,int y,int n,int m ){
for( int i=;i<=;i++ ){
for( int k=;k<;k++ ){
int tx = x+i*dx[k];
int ty = y+i*dy[k];
if( in(tx,ty,n,m)==true ){
if( mat[tx][ty]!='E' )
return false;
}
}
}
return true;
}
bool ok_r( int x,int y,int n,int m ){
for( int i=;i<=;i++ ){
for( int k=;k<;k++ ){
int tx = x+i*dx[k];
int ty = y+i*dy[k];
if( in(tx,ty,n,m)==true ){
if( mat[tx][ty]!='E' )
return false;
}
}
}
return true;
}
bool ok_n( int x,int y,int cnt_node ){
for( int i=;i<cnt_node;i++ ){
if( node[i].x==x&&node[i].y==y ) continue;
if( node[i].flag==false ) continue;
int ddx = abs( x-node[i].x );
int ddy = abs( y-node[i].y );
if( (ddx==&&ddy==)||(ddx==&&ddy==) )
return false;
}
return true;
} void re( int cnt_node ){
for( int i=;i<cnt_node;i++ ){
if( vis[ i ]== ){
mat[ node[i].x ][ node[i].y ] = node[i].ch;
node[ i ].flag = true;
}
}
} bool judge( int cnt_node,int n,int m ){
for( int i=;i<cnt_node;i++ ){
if( vis[ i ]== ){
mat[ node[i].x ][ node[i].y ] = 'E';
node[ i ].flag = false;
}
}
bool flag = true;
for( int i=;i<n;i++ ){
for( int j=;j<m;j++ ){
if( mat[i][j]=='E' )
continue;
if( mat[i][j]=='N'&&ok_n( i,j,cnt_node )==false ){
flag = false;
break;
}
else if( mat[i][j]=='R'&&ok_r( i,j,n,m )==false ){
flag = false;
break;
}
else if( mat[i][j]=='B'&&ok_b( i,j,n,m )==false ){
flag = false;
break;
}
else if( mat[i][j]=='Q'&&ok_q( i,j,n,m )==false ){
flag = false;
break;
}
else if( mat[i][j]=='K'&&ok_k( i,j,n,m )==false ){
flag = false;
break;
}
}
if( flag==false ) break;
}
re( cnt_node );
return flag;
} int main(){
char s[ ];
while( scanf("%s",&s)!=EOF ){
int n,m;
int cnt_node = ;
scanf("%d%d",&m,&n);
for( int i=;i<n;i++ ){
for( int j=;j<m;j++ ){
scanf("%s",s);
mat[i][j] = s[];
if( s[]!='E' ){
node[ cnt_node ].x = i;
node[ cnt_node ].y = j;
node[ cnt_node ].flag = true;
node[ cnt_node++ ].ch = s[];
}
}
}
scanf("%s",s);
int N = (<<cnt_node);
//printf("cnt_node=%d\n",cnt_node);
int ans = inf;
for( int i=;i<N;i++ ){
int temp_ans = ;
for( int j=;j<cnt_node;j++ ){
if( i&(<<j) ) {vis[ j ] = ,temp_ans++;}
else vis[ j ] = ;
}
if( judge( cnt_node,n,m )==true ){
ans = min( ans,temp_ans );
}
}
printf("Minimum Number of Pieces to be removed: %d\n",ans);
}
return ;
}
POJ2222+暴力搜索的更多相关文章
- ACM 暴力搜索题 题目整理
UVa 129 Krypton Factor 注意输出格式,比较坑爹. 每次要进行处理去掉容易的串,统计困难串的个数. #include<iostream> #include<vec ...
- hdu 4740 The Donkey of Gui Zhou(暴力搜索)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4740 [题意]: 森林里有一只驴和一只老虎,驴和老虎互相从来都没有见过,各自自己走过的地方不能走第二次 ...
- hdu 1427 速算24点 dfs暴力搜索
速算24点 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem De ...
- 随手练——洛谷-P1151(枚举与暴力搜索)
枚举 #include <iostream> using namespace std; int main() { ; cin >> k; ; i < ; i++) { ) ...
- 枚举进程——暴力搜索内存(Ring0)
上面说过了隐藏进程,这篇博客我们就简单描述一下暴力搜索进程. 一个进程要运行,必然会加载到内存中,断链隐藏进程只是把EPROCESS从链表上摘除了,但它还是驻留在内存中的.这样我们就有了找到它的方法. ...
- [luogu 1092] 虫食算 (暴力搜索剪枝)
传送门 Description Input 包含四行. 第一行有一个正整数 (N≤26). 后面的三行,每行有一个由大写字母组成的字符串,分别代表两个加数以及和.这3个字符串左右两端都没有空格,从高位 ...
- HDU 3131 One…Two…Five! (暴力搜索)
题目链接:pid=3131">HDU 3131 One-Two-Five! (暴力搜索) 题意:给出一串数字,要求用加,减,乘,除(5/2=2)连接(计算无优先级:5+3*6=8*6= ...
- 吴裕雄 python 机器学习——模型选择参数优化暴力搜索寻优GridSearchCV模型
import scipy from sklearn.datasets import load_digits from sklearn.metrics import classification_rep ...
- POJ 1129:Channel Allocation 四色定理+暴力搜索
Channel Allocation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 13357 Accepted: 68 ...
随机推荐
- MySQL 세자리 마다 콤마 찍기
MySQL에서 세자리 마다 콤마를 찍으려면 FORMAT 함수를 이용하시면 됩니다. FORMAT( 컬럼명, 소수점이하 자리수 ) 여기서 컬럼의 자료형이 varchar와 같은 문자형이 ...
- hadoop-2.5安装与配置
安装之前准备4台机器:bluejoe0,bluejoe4,bluejoe5,bluejoe9 bluejoe0作为master,bluejoe4,5,9作为slave bluejoe0作为nameno ...
- ASPxGridView动态创建表格列编辑模板
在项目中用到了DevExpress的ASPxGridview控件,每每去配置它的时候,总感觉很是啰嗦,于是想到了用代码自动配置. 于是有了这样的代码: foreach (ZiyuWeb.Entity. ...
- Fragment的数据传递
开发之中用到的Fragment的次数越来越多,很多小的项目都已经直接在使用Fragment作为Activity的载体来切换页面.而在开发之中页面的切换我们最关心的问题就是数据的传递了.今天我们主要来研 ...
- zabbix数据存储
一.zabbix数据库 zabbix-server将采集到的数据存储在数据库中,最常用的Mysql,数据存储的大小和每秒处理的数据量有关,数据存储取决于每秒处理的数据量和Housekeeper的删除数 ...
- 使用C++11安全的在线程中控制UI
本篇文章由:http://www.sollyu.com/using-the-c11-secure-online-process-control-ui/ 说明 首先这里使用的是 Visual Studi ...
- Eclipse启动报错Java was started but returned exit code=13
启动Eclipse的时候报错Java was started but returned exit code=13,这个错误的原因是由于eclipse版本与jdk版本不符导致的,可能你的eclipse是 ...
- Linux 网络I/O模型
前言 本文是笔者的第一篇博文,在这篇文章的大部分内容基于steven大神的<Unix Network Programming>.一来是对书本内容的整理与归纳.二来也是为接下来的博文奠定基础 ...
- jQuery—一些常见方法(2)DOM操作【insertBefore(),insertAfter(),appendTo(),prependTo(),before(),after(),append(),prepend(),remove(),on(),off(),scrollTop()】
一.insertBefore() 如下代码:找到span标签,将span标签剪切到div的前面 <!DOCTYPE html> <html lang="en"&g ...
- Google设计理念
Google的十大信条 我们首次拟就这“十大信条”还是在Google刚刚成立没几年的时候.此后,我们时常重新审视这份清单,看看它是否依然适用.我们希望这些信条永不过时,而您也可以监督我们是否遵守了这些 ...