博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Luogu] 四子连棋
阅读量:5009 次
发布时间:2019-06-12

本文共 2017 字,大约阅读时间需要 6 分钟。

广搜

#include
#include
#include
#include
#include
#define maxn 10010#define inf 1000000007#define ll long longusing namespace std;int n, m, ans = inf;int dx[5] = {
0, 0, 1, -1, 0};int dy[5] = {
0, 1, 0, 0, -1};struct Node { int a[5][5]; int color; int step;} t;queue
q;bool check(Node f) { for(int i = 1; i <= 4; i ++) { if(f.a[i][1] == f.a[i][2] && f.a[i][1] == f.a[i][3] && f.a[i][1] == f.a[i][4]) return 1; if(f.a[1][i] == f.a[2][i] && f.a[1][i] == f.a[3][i] && f.a[1][i] == f.a[4][i]) return 1; } if(f.a[1][1] == f.a[2][2] && f.a[1][1] == f.a[3][3] && f.a[1][1] == f.a[4][4]) return 1; if(f.a[1][4] == f.a[3][2] && f.a[1][4] == f.a[2][3] && f.a[1][4] == f.a[4][1]) return 1; return 0;}void init() { //处理一开始的棋子颜色 t.step = 0; t.color = 2; for(int i = 1; i <= 4; i ++) for(int j = 1; j <= 4; j ++) if(t.a[i][j] == 2) for(int k = 1; k <= 4; k ++) { int x = i + dx[k]; int y = j + dy[k]; if(t.a[x][y] == 2) continue ; if(x >= 1 && x <= 4 && y >= 1 && y <= 4) { //注意边界 Node c = t; c.color = t.a[x][y]; c.step = 1; swap(c.a[i][j], c.a[x][y]);//移动棋子 q.push(c); } }}void bfs() { //广搜模板 while(!q.empty()) { Node b = q.front(); q.pop(); if(check(b)) { ans = b.step; return ; } for(int i = 1; i <= 4; i ++) for(int j = 1; j <= 4; j ++) { if(b.a[i][j] == 2) { for(int k = 1; k <= 4; k ++) { int x = i + dx[k]; int y = j + dy[k]; if(x >= 1 && x <= 4 && y >= 1 && y <= 4 && b.a[x][y] == (b.color ^ 1)) { //黑白交替移动 Node c = b; swap(c.a[i][j], c.a[x][y]);//移动棋子 c.color = b.color ^ 1;//如果上一步走的是黑,这一步就是白,上一步是白,这一步是黑。 c.step = b.step + 1;//步数加一 q.push(c);//将当前状态入队 } } } } }}int main() { int x, y, z; char s[10]; for(int i = 1; i <= 4; i ++) { scanf("%s",s+1); for(int j = 1; j <= 4; j ++) { //处理图,便于广搜 if(s[j] == 'B') t.a[i][j] = 1; if(s[j] == 'W') t.a[i][j] = 0; if(s[j] == 'O') t.a[i][j] = 2; } } init(); bfs(); printf("%d\n", ans); return 0;}

 

转载于:https://www.cnblogs.com/shandongs1/p/8439294.html

你可能感兴趣的文章
UI:基础
查看>>
浅谈 @RequestParam 和@PathVariable
查看>>
设计模式之---装饰器设计模式
查看>>
基于WordNet的英文同义词、近义词相似度评估及代码实现
查看>>
Equation漏洞混淆利用分析总结(上)
查看>>
js-倒计时自动隐藏
查看>>
shell学习1shell简介
查看>>
VM虚拟机下安装Centos7.0图文教程
查看>>
Javascript 汉字转拼音
查看>>
简单工厂模式
查看>>
Android(java)学习笔记205:JNI之编写jni程序适配所有处理器型号
查看>>
11.3 字典复习
查看>>
实用SQL
查看>>
走在Android开发的路上(二):Android快速入门
查看>>
Hbase取数据问题Bug
查看>>
《你的灯还亮着吗》阅读笔记三
查看>>
POJ2533 Longest ordered subsequence
查看>>
大话设计模式之简单工厂模式
查看>>
如何创建ASM磁盘?
查看>>
利用U盘安装Cent OS 7操作系统
查看>>