• POJ2222+暴力搜索


    一共2^15个状态

    比较简单

      1 /*
      2 2^15 states
      3 */
      4 #include<stdio.h>
      5 #include<string.h>
      6 #include<stdlib.h>
      7 #include<math.h>
      8 #include<algorithm>
      9 using namespace std;
     10 
     11 const int maxn = 10005;
     12 const int inf = 99999999;
     13 const int dx[]={0,0,1,-1,1,-1,1,-1};
     14 const int dy[]={1,-1,0,0,-1,1,1,-1};
     15 char mat[ 12 ][ 12 ];
     16 struct Node{
     17     int x,y;
     18     char ch;
     19     bool flag;
     20 }node[ 24 ];
     21 int vis[ 24 ];
     22 
     23 bool in( int x,int y,int n,int m ){
     24     if( x>=0&&x<n&&y>=0&&y<m ) return true;
     25     else return false;
     26 }
     27 
     28 bool ok_k( int x,int y,int n,int m ){
     29     for( int i=0;i<8;i++ ){
     30         int tx = x+dx[i];
     31         int ty = y+dy[i];
     32         if( in(tx,ty,n,m)==true ) {
     33             if( mat[tx][ty]!='E' )
     34                 return false;
     35         }
     36     }
     37     return true;
     38 }
     39 bool ok_q( int x,int y,int n,int m ){
     40     for( int i=1;i<=12;i++ ){
     41         for( int k=0;k<8;k++ ){
     42             int tx = x+i*dx[k];
     43             int ty = y+i*dy[k];
     44             if( in(tx,ty,n,m)==true ){
     45                 if( mat[tx][ty]!='E' ) 
     46                     return false;
     47             }
     48         }
     49     }
     50     return true;
     51 }
     52 bool ok_b( int x,int y,int n,int m ){
     53     for( int i=1;i<=12;i++ ){
     54         for( int k=4;k<8;k++ ){
     55             int tx = x+i*dx[k];
     56             int ty = y+i*dy[k];
     57             if( in(tx,ty,n,m)==true ){
     58                 if( mat[tx][ty]!='E' ) 
     59                     return false;
     60             }
     61         }
     62     }
     63     return true;
     64 }
     65 bool ok_r( int x,int y,int n,int m ){
     66     for( int i=1;i<=10;i++ ){
     67         for( int k=0;k<4;k++ ){
     68             int tx = x+i*dx[k];
     69             int ty = y+i*dy[k];
     70             if( in(tx,ty,n,m)==true ){
     71                 if( mat[tx][ty]!='E' ) 
     72                     return false;
     73             }
     74         }
     75     }
     76     return true;
     77 }
     78 bool ok_n( int x,int y,int cnt_node ){
     79     for( int i=0;i<cnt_node;i++ ){
     80         if( node[i].x==x&&node[i].y==y ) continue;
     81         if( node[i].flag==false ) continue;
     82         int ddx = abs( x-node[i].x );
     83         int ddy = abs( y-node[i].y );
     84         if( (ddx==2&&ddy==1)||(ddx==1&&ddy==2) )
     85             return false;
     86     }
     87     return true;
     88 }
     89 
     90 void re( int cnt_node ){
     91     for( int i=0;i<cnt_node;i++ ){
     92         if( vis[ i ]==1 ){
     93             mat[ node[i].x ][ node[i].y ] = node[i].ch;
     94             node[ i ].flag = true;
     95         }
     96     }
     97 }
     98 
     99 
    100 bool judge( int cnt_node,int n,int m ){
    101     for( int i=0;i<cnt_node;i++ ){
    102         if( vis[ i ]==1 ){
    103             mat[ node[i].x ][ node[i].y ] = 'E';
    104             node[ i ].flag = false;
    105         }
    106     }
    107     bool flag = true;
    108     for( int i=0;i<n;i++ ){
    109         for( int j=0;j<m;j++ ){
    110             if( mat[i][j]=='E' ) 
    111                 continue;
    112             if( mat[i][j]=='N'&&ok_n( i,j,cnt_node )==false ){
    113                 flag = false;
    114                 break;
    115             }
    116             else if( mat[i][j]=='R'&&ok_r( i,j,n,m )==false ){
    117                 flag = false;
    118                 break;
    119             }
    120             else if( mat[i][j]=='B'&&ok_b( i,j,n,m )==false ){
    121                 flag = false;
    122                 break;
    123             }
    124             else if( mat[i][j]=='Q'&&ok_q( i,j,n,m )==false ){
    125                 flag = false;
    126                 break;
    127             }
    128             else if( mat[i][j]=='K'&&ok_k( i,j,n,m )==false ){
    129                 flag = false;
    130                 break;
    131             }
    132         }
    133         if( flag==false ) break;
    134     }
    135     re( cnt_node );
    136     return flag;
    137 }
    138 
    139 int main(){
    140     char s[ 12 ];
    141     while( scanf("%s",&s)!=EOF ){
    142         int n,m;
    143         int cnt_node = 0;
    144         scanf("%d%d",&m,&n);
    145         for( int i=0;i<n;i++ ){
    146             for( int j=0;j<m;j++ ){
    147                 scanf("%s",s);
    148                 mat[i][j] = s[0];
    149                 if( s[0]!='E' ){
    150                     node[ cnt_node ].x = i;
    151                     node[ cnt_node ].y = j;
    152                     node[ cnt_node ].flag = true;
    153                     node[ cnt_node++ ].ch = s[0];
    154                 }
    155             }
    156         }
    157         scanf("%s",s);
    158         int N = (1<<cnt_node);
    159         //printf("cnt_node=%d
    ",cnt_node);
    160         int ans = inf;
    161         for( int i=0;i<N;i++ ){
    162             int temp_ans = 0;
    163             for( int j=0;j<cnt_node;j++ ){
    164                 if( i&(1<<j) ) {vis[ j ] = 1,temp_ans++;}
    165                 else vis[ j ] = 0;
    166             }
    167             if( judge( cnt_node,n,m )==true ){
    168                 ans = min( ans,temp_ans );
    169             }
    170         }
    171         printf("Minimum Number of Pieces to be removed: %d
    ",ans);
    172     }
    173     return 0;
    174 }
    View Code
    keep moving...
  • 相关阅读:
    swift锁屏播放,音乐进度更新,专辑,歌手名显示
    swift Dictionary 字典
    Swift中的集合类型
    Swift String 一些常用方法
    Swift自定义Class实现Hashable
    二元最近的共同祖先问题(O(n) time 而且,只有一次遍历,O(1) Space (它不考虑函数调用栈空间))
    BZOJ1579 USACO 2009 Feb Gold 3.Revamping Trails Solution
    [DEEP LEARNING An MIT Press book in preparation]Linear algebra
    POJ--2391--Ombrophobic Bovines【分割点+Floyd+Dinic优化+二分法答案】最大网络流量
    c#-RTF文本编辑器
  • 原文地址:https://www.cnblogs.com/xxx0624/p/3201906.html
Copyright © 2020-2023  润新知