格子游戏
来源:互联网 发布:林书豪 数据 编辑:程序博客网 时间:2024/06/02 14:56
格子游戏
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 18 Accepted Submission(s) : 2
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
Alice和Bob玩了一个古老的游戏:首先画一个n*n的点阵,接着他们两个轮流在相邻的点之间画上虚边和粗边,直到围成一个封闭的圈(面积不必为1)为止,“封圈”的那个人就是赢家。因为棋盘实在是太大了(n<=200),他们的游戏实在是长了!他们甚至在游戏中都不知道谁赢得了游戏。于是请你写一个程序,帮助他们计算他们是否结束了游戏?
Input
每组输入数据第一行为两个整数n和m。m表示一共画了m条线。以后m行,每行首先有两个数字(x,y),代表了画线的起点坐标,接着用空格隔开一个字符,假如字符是“D”,则是向下连一条边,如果是“R”就是向右连一条边。输入数据不会有重复的边且保证正确。
Output
对于每组数据,输出一行:在第几步的时候结束。假如m步之后也没有结束,则输出一行“draw”。
Sample Input
3 51 1 D1 1 R1 2 D2 1 R 2 2 D
Sample Output
4
Author
//二维并查集判环,只要加入的两条边的祖先一样,那就构成环,前提是不会有重复边。
//还要就是输入数据的时候处理一下。 flag
#include<cstdio>struct node{ int x,y;}f[301][301],k1,k2;node root(node k){ if((f[k.x][k.y].x==k.x)&&(f[k.x][k.y].y==k.y)) return k; f[k.x][k.y]=root(f[k.x][k.y]); return f[k.x][k.y];}int main(){ //freopen("a.txt","r",stdin); int n,m,i,j,a,b,flag; char c; while(scanf("%d%d",&n,&m)!=EOF) { flag=0; for(i=1;i<=n;i++) for(j=1;j<=n;j++) {f[i][j].x=i;f[i][j].y=j;} for(i=1;i<=m;i++) { scanf("%d %d %c",&a,&b,&c); // printf("%d %d %c\n",a,b,c); if(flag) continue; if(c=='D') { k1=root(f[a][b]); k2=root(f[a+1][b]); } if(c=='R') { k1=root(f[a][b]); k2=root(f[a][b+1]); } if(k1.x==k2.x&&k1.y==k2.y) { printf("%d\n",i); flag=1;} else f[k1.x][k1.y]=k2; } if(!flag) printf("draw\n"); } return 0;}
0 0
- 格子游戏
- 格子游戏
- 格子游戏
- 翻格子游戏
- 格子游戏 解题报告
- ssl2340 格子游戏
- 书上例题 格子游戏
- EasyX涂格子游戏
- wustoj1938格子游戏
- 格子游戏(乙)
- Fliptile 翻格子游戏
- 格子类型游戏的总结
- 格子游戏类型实践—1
- 格子游戏类型实践—2
- 格子游戏类型实践—3
- 格子类型游戏实践源项目
- 【TOJ1162】格子游戏-二维并查集判环
- [bzoj1647][Usaco2007 Open]Fliptile 翻格子游戏
- UVA10282
- java爱听音乐音乐播放器
- lable设置
- C语言中switch case的类型比较机制
- 黑马程序员—[JavaEE就业薪资] 云计算8期,毕业22个工作日,就业率83.02%,平均薪资8110元
- 格子游戏
- 单调队列模板
- IMSDroid视频横屏显示
- 黑马程序员—[Android就业薪资] Android30期,毕业37工作日,就业率93%,平均薪水10315元!
- 【教程】如何申请Chrome应用商店(Web Store)开发者
- Struts2多文件上传例子
- 一幅画
- HDU 1258 Sum it up 搜索DFS
- MATLAB中的字符串