1 条题解

  • 0
    @ 2026-10-25 20:24:59

    思路

    16位棋盘仅8黑8白,共12870可达状态;只交换异色相邻格,求最小步数而非输出方案。

    参考程序(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    int main(){string s;int a=0,b=0;for(int i=0;i<8;i++){cin>>s;int &z=i<4?a:b;for(char c:s)z=z*2+c-'0';}vector<pair<int,int>>edges;for(int i=0;i<4;i++)for(int j=0;j<4;j++){int p=i*4+j;if(i<3)edges.push_back({p,p+4});if(j<3)edges.push_back({p,p+1});}vector<int>d(65536,-1);queue<int>q;d[a]=0;q.push(a);while(!q.empty()){int v=q.front();q.pop();if(v==b){cout<<d[v]<<'\n';return 0;}for(auto e:edges)if(((v>>e.first)&1)!=((v>>e.second)&1)){int z=v^(1<<e.first)^(1<<e.second);if(d[z]<0){d[z]=d[v]+1;q.push(z);}}}}
    
    • 1

    信息

    ID
    1479
    时间
    1000ms
    内存
    64MiB
    难度
    普及
    标签
    递交数
    1
    已通过
    1
    上传者