• poj 1753


    翻转棋,注意是翻转周围四个的,不是整行列的  汗-_-!

    哥的代码风还是不错的

    二进制储存状态

    Sample Input

    bwwb
    bbwb
    bwwb
    bwww

    Sample Output

    4
    
     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<queue>
     7 using namespace std;
     8 int n,m,t;
     9 int vis[65536];
    10 struct node
    11 {
    12     int s,t;
    13 }st;
    14 int flip(int s,int i)   //当前的状态,翻第几个棋子
    15 {
    16     int x=i/4;
    17     int y=i%4;
    18     s^=(1<<i);  //翻选中的棋子
    19     if(x>0) s^=(1<<(i-4));//翻转上面的
    20     if(y>0) s^=(1<<(i-1));//翻转左边的
    21     if(x<3) s^=(1<<(i+4));//翻转下面的
    22     if(y<3) s^=(1<<(i+1));//翻转右边的
    23     return s;
    24 }
    25 void bfs()
    26 {
    27     node now,next;
    28     vis[st.s]=1;
    29     queue<node> q;
    30     q.push(st);
    31     while(!q.empty())
    32     {
    33         now=q.front();
    34         q.pop();
    35         //printf("%d %d
    ",now.s,now.t);
    36         if(now.s==65535||now.s==0)  //全黑or全白
    37         {
    38             printf("%d
    ",now.t);
    39             return;
    40         }
    41         for(int i=0;i<16;i++)
    42         {
    43             next.s=flip(now.s,i);
    44             next.t=now.t+1;
    45             if(!vis[next.s])
    46             {
    47                 vis[next.s]=1;
    48                 q.push(next);
    49             }
    50         }
    51     }
    52     printf("Impossible
    ");
    53     return;
    54 }
    55 int main()
    56 {
    57     int i,j,k;
    58     //freopen("1.in","r",stdin);
    59     char s[5];
    60     st.s=0;
    61     for(i=0;i<4;i++)
    62     {
    63         scanf("%s",s);
    64         for(j=0;j<4;j++)
    65             if(s[j]=='b')   st.s+=1<<(i*4+j);
    66     }
    67     memset(vis,0,sizeof(vis));
    68     st.t=0;
    69     bfs();
    70     return 0;
    71 }
  • 相关阅读:
    彻底弄懂最短路径问题[转]
    activiti任务TASK
    linux查看磁盘空间
    Introduction to the POM
    【转】10 个迅速提升你 Git 水平的提示
    macbook安装mysql
    java并发编程之美-笔记
    springboot2精髓读书笔记
    java多线程
    实战JAVA虚拟机笔记
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/4278583.html
Copyright © 2020-2023  润新知