格子游戏 //假的
【问题描述】
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
1 #include<iostream> 2 using namespace std; 3 #include<cstdio> 4 #include<cstring> 5 int father[1000008]; 6 int node[10001][10001]; 7 8 9 /*int find(int x) 10 { 11 if(father[x]!=x)father[x]=find(father[x]); 12 else return x; 13 }*/ 14 int nfather[1000001]; 15 int main() 16 { 17 int N,M; 18 scanf("%d%d",&N,&M); 19 for(int i=1;i<=N;i++) 20 for(int j=1;j<=N;j++) 21 { 22 node[i][j]=i*10+j; 23 father[i*10+j]=i*10+j; 24 } 25 for(int i=1;i<=M;i++) 26 { 27 int a,b;char c; 28 cin>>a>>b>>c; 29 if(c=='R') 30 { 31 b=b+1; 32 father[node[a][b]]=father[node[a][b-1]]; 33 } 34 if(c=='D') 35 { 36 a=a+1; 37 father[node[a][b]]=father[node[a-1][b]]; 38 } 39 nfather[node[a][b]]++; 40 if(nfather[node[a][b]]>=2&&father[node[a-1][b]]==father[node[a][b-1]]) 41 { 42 printf("%d",i); 43 return 0; 44 } 45 } 46 return 0; 47 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用