博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【题解】格子游戏
阅读量:5216 次
发布时间:2019-06-14

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

题目描述

        Alice和Bob玩了一个古老的游戏:首先画一个n × n的点阵(下图n = 3)

        接着,他们两个轮流在相邻的点之间画上红边和蓝边:

        

        直到围成一个封闭的圈(面积不必为1)为止,“封圈”的那个人就是赢家。因为棋盘实在是太大了(n ≤ 200),他们的游戏实在是太长了!他们甚至在游戏中都不知道谁赢得了游戏。于是请你写一个程序,帮助他们计算他们是否结束了游戏?

 

输入格式

        输入数据第一行为两个整数n和m。m表示一共画了m条线。以后m行,每行首先有两个数字(x, y),代表了画线的起点坐标,接着用空格隔开一个字符,假如字符是"D ",则是向下连一条边,如果是"R "就是向右连一条边。输入数据不会有重复的边且保证正确。

 

输出格式

        输出一行:在第几步的时候结束。假如m步之后也没有结束,则输出一行“draw”。

 

输入样例

3 5

1 1 D

1 1 R

1 2 D

2 1 R

2 2 D

 

输出样例

4

 

题解

        貌似很麻烦,但实际上还是可以直接套并查集。

        可以看出,如果点$i$和点$j$连接后形成封闭圈,那么点$i$和点$j$必然都能连通点$k$,我们只需要用并查集判断点$i$和点$j$是否在同一个集合里,就可以知道是否存在这个点$k$了。

#include 
#define MAX_N (200 + 5)using namespace std;struct Node{ int x, y; inline friend bool operator == (Node x, Node y) {
return x.x == y.x && x.y == y.y;} inline friend bool operator != (Node x, Node y) {
return !(x == y);}};int n, m;Node r[MAX_N][MAX_N];Node Root(Node x){ Node R = x, tmp; while(R != r[R.x][R.y]) R = r[R.x][R.y]; while(x != r[x.x][x.y]) tmp = r[x.x][x.y], r[x.x][x.y] = R, x = tmp; return R;}int main(){ cin >> n >> m; char ch; Node u, v; for(register int i = 1; i <= n; ++i) { for(register int j = 1; j <= n; ++j) { u = (Node){i, j}; r[i][j] = u; } } for(register int i = 1; i <= m; ++i) { cin >> u.x >> u.y >> ch; v = u; if(ch == 'D') ++v.x; else ++v.y; if(Root(u) == Root(v)) return cout << i, 0; r[Root(u).x][Root(u).y] = Root(v); } cout << "draw"; return 0;}
参考程序

 

转载于:https://www.cnblogs.com/kcn999/p/10990273.html

你可能感兴趣的文章
Angular Reactive Form-响应式表单验证
查看>>
Apache参数的优化(转)
查看>>
laravel中遇到的实战项目小问题
查看>>
YAML_04 用user模块添加用户,并修改密码
查看>>
SharePoint 2010工作流中标准的Elements.xml文件及说明
查看>>
一步步学习SPD2010--第八章节--理解工作流(10)--导出工作流到Visio绘图
查看>>
一步步学习SPD2010--第十一章节--处理母版页
查看>>
SharePoint 2010 At Work--SharePoint 2010 Tab Page 创建选项卡页面
查看>>
[LeetCode] 331. Verify Preorder Serialization of a Binary Tree_Medium tag: stack
查看>>
工具栏
查看>>
JavaScript 判断复选框是否选中并取出值
查看>>
duilib加消息
查看>>
入门必看--JavaScript基础
查看>>
MyBatis入门
查看>>
URL地址下载图片到本地
查看>>
fmt:formatDate标签的输出格式
查看>>
Java开发笔记(四十)日期与字符串的互相转换
查看>>
netty中的PoolChunk
查看>>
Source Insight 中文注释为乱码解决办法(完美解决,一键搞定)
查看>>
WPF中将DataGrid导出Excel
查看>>