黑白棋游戏

二进制串的储存是个细节比较多的问题qaq

然后各个位置的查询也有些地方要注意

这次真的是改到吐了qwq

不过我似乎比写了很多exchange的代码短一点(就是时间花的有点久(倒地身亡

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<string>
 7 #define ll long long
 8 using namespace std;
 9 int t[1<<18],fax[1<<18],fay[1<<18],fa[1<<18],y[1<<18],a[20];
10 bool vis[1<<20];
11 void cou(int x){
12     int t1=x/4+1,t2=x%4+1;
13     cout<<t1<<" "<<t2<<" ";
14 }
15 void pr(int x){
16     if (!fa[x]) return ;
17     pr(fa[x]);
18     cou(fax[x]),cou(fay[x]);
19     cout<<endl;
20 }
21 int main(){
22     int x;
23     int ch=0,zh=0;
24     for (int i=1;i<=16;++i) scanf ("%1d",&a[i]);
25     for (int i=16;i>=1;--i){
26             ch<<=1;
27             ch|=a[i];
28     }
29     for (int i=1;i<=16;++i) scanf ("%1d",&a[i]);
30     for (int i=16;i>=1;--i){
31             zh<<=1;
32             zh|=a[i];
33     }
34     t[1]=ch;
35     int h=0,ta=1,q,p;
36     while (h<ta){
37         int x=t[++h];
38         vis[x]=1;
39         int flag=0;
40         int to=ch;
41         for (int i=0;i<16;++i){
42             if (i<12) {
43                 if ((x&(1<<i))&&(!(x&(1<<i+4)))) to=x&(~(1<<i)),to|=(1<<i+4);
44                 else if ((x&(1<<i+4))&&(!(x&(1<<i)))) to=x&(~(1<<i+4)),to|=(1<<i);
45                 if (!vis[to]) t[++ta]=to,vis[to]=1,fa[to]=x,fax[to]=i,fay[to]=i+4,y[to]=y[x]+1;
46             }
47             if (to==zh){flag=1;break;}
48             if (i!=3&&i!=7&&i!=11&&i!=15){
49                 if ((x&(1<<i))&&(!(x&(1<<i+1)))) to=x&(~(1<<i)),to|=(1<<i+1);
50                 else if ((x&(1<<i+1))&&(!(x&(1<<i)))) to=x&(~(1<<i+1)),to|=(1<<i);
51                 if (!vis[to]) t[++ta]=to,vis[to]=1,fa[to]=x,fax[to]=i,fay[to]=i+1,y[to]=y[x]+1;
52             }
53             if (to==zh){flag=1;break;}
54         }
55         if (flag) {q=to;break;}
56         }
57     cout<<y[q]<<endl;
58     pr(q);
59     return 0;
60 }
时间: 2024-12-24 16:34:13

黑白棋游戏的相关文章

黑白棋游戏 (codevs 2743)题解

[问题描述] 黑白棋游戏的棋盘由4×4方格阵列构成.棋盘的每一方格中放有1枚棋子,共有8枚白棋子和8枚黑棋子.这16枚棋子的每一种放置方案都构成一个游戏状态.在棋盘上拥有1条公共边的2个方格称为相邻方格.一个方格最多可有4个相邻方格.在玩黑白棋游戏时,每一步可将任何2个相邻方格中棋子互换位置.对于给定的初始游戏状态和目标游戏状态,编程计算从初始游戏状态变化到目标游戏状态的最短着棋序列. [样例输入] 1111 0000 1110 0010 1010 0101 1010 0101 [样例输出] 4

黑白棋游戏(或是叫再破难关)——稍微用了下状态压缩的bfs

洛谷和CodeVS 上叫做黑白棋游戏,要求输出路径.CodeVS 上没有spj,洛谷上有但是我的输出总是直接报错.最后找到了Vijos 上的再破难关,一样的题,只是不需要输出路径,交了就对了. 1 #include<iostream> 2 #include<cstring> 3 #include<cstdlib> 4 #include<cstdio> 5 #include<vector> 6 #include<queue> 7 usi

简单的黑白棋游戏

/*---------------------------WB------BW---------------------------*/ //tab1.txt/---------------------------WB------BW-------W-------------------*/ //tab2.txt 1 #include<iostream> 2 #include<cstdio> 3 #include<fstream> 4 #include<strin

[LeetCode] 8.8 Othello Game 黑白棋游戏

8.8 Othello is played as follows: Each Othello piece is white on one side and black on the other. When a piece is surrounded by its opponents on both the left and right sides, or both the top and bottom, it is said to be captured and its color is fli

游戏开发(三)——WIN32 黑白棋(一)——棋局逻辑的设计

今天以黑白棋为例,开始给一个win32的小游戏设计, 这里打算分3部分介绍 1.棋盘,棋局的现实 2.玩家.AI的现实(且听下回分解) 3.游戏画面的现实(且听下下回分解) 其中第一部分为黑白棋游戏的主要逻辑: 1.棋盘,以及棋盘上的棋子的存储形式.这里用到了位图. 2.是否可以落子的判断(黑白棋是只有你落子的位置,在横竖斜八个方向中任意一个方向,能吃掉对方的子,你才可以落在该位置,八个方向都吃不掉对方子的位置是不能下的),以及吃子的逻辑(吃子的逻辑同样是八个方向,两个己方棋子之间夹住的对方棋子

结对项目--黑白棋

一题目简介 初始状态:在一个8*8的棋盘中央交叉排放黑白棋子各两枚,白棋先走. (1)每个棋手下棋时,摆子的位置必须是以自己的棋子能包围住对方一个或多个棋子, 被包围住的对方棋子将成为自己的棋子.包围的方向可以是上下左右以及斜线8个方向, 只要能连成一线即可. (2)当轮到某一个棋手下子,但是他没有可以包围对方棋子的位置时,他必须停步,让 对方走棋,直到他可以走为止. (3)当棋盘上一方的棋子为0或者下满64格,游戏结束,棋子少者输. 二结对分工及过程:本人做测试,同伴写代码 三代码地址 htt

游戏开发(三)——WIN32 黑白棋(三)——游戏画面的现实

整个游戏分3部分介绍. 1.棋局的现实 2.AI的现实 3.游戏画面的现实 提供一下完整项目下载 这是第三部分:画面的显示 这部分其实就比较简单的,说白了就是api的堆砌. 主要了解下windows的消息机制,以及怎么画图 主要是分别封装了下对棋盘,棋子,以及当前轮到谁,当前比分是多少,就是游戏画面上不同的部分的绘制. void DrawReversiBoard(); void DrawReversiPieces(EnumReversiPiecesType type, int row_y, in

[某鸥实训记][objective-c][第二天][作业]黑白棋+关灯游戏

自己写的..所以可能没什么逻辑性...可能特别水... 环境为ios SDK8.0 选择的Simulator是iPhone6 创建ios SingleViewApplication..然后再ViewController.m中的代码就是全部了 1 // 2 // ViewController.m 3 // 黑白棋0908 4 // 5 // Created by ******* on 15/9/8. 6 // Copyright (c) 2015年 *******. All rights rese

游戏开发(三)——WIN32 黑白棋(二)——AI

今天是第二部分:玩家和AI 玩家主要是实现悔棋的功能 AI主要是搜索.最大最小算法,枝剪算法 1.每一步落子的步骤,为了可以悔棋 typedef struct ReversiStep {     ReversiBitBoard m_LastMap;     ReversiStep& operator= (const ReversiStep& temp)     {         m_LastMap = temp.m_LastMap;         return *this;     }