(尽管可能各位大佬觉得很简单,但对于讲课时真的没看懂这个代码的蒟蒻,真的要写一写)
这个题是一个神奇的二维的并查集,然而二维的真的好乱,弄得我搞不懂qwq
jiuzhe代码食用吧emm
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; int n,m,x,y; char a; struct hyh{//首先定义了一个结构体,里面存横纵坐标 int x,y; }f[201][201],k1,k2; hyh find(hyh sy){//也是“找父亲”,只不过变成了二维 if(f[sy.x][sy.y].x==sy.x&&f[sy.x][sy.y].y==sy.y)return sy;//如果他自己的父亲是自己,返回 f[sy.x][sy.y]=find(f[sy.x][sy.y]); return f[sy.x][sy.y]; } void unionn(hyh a,hyh b){ f[b.x][b.y]=a;//合并 } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){ f[i][j].x=i; f[i][j].y=j; } for(int i=1;i<=m;i++){ cin>>x>>y>>a; if(a=='D'){ k1=find(f[x][y]); k2=find(f[x+1][y]); } if(a=='R'){ k1=find(f[x][y]); k2=find(f[x][y+1]); } if((k1.x==k2.x)&&(k1.y==k2.y)){ cout<<i<<endl; return 0; } if((k1.x!=k2.x)||(k1.y!=k2.y)) unionn(k1,k2); } cout<<"draw"<<endl; return 0; }