一个简短的代码(doge)
好处就是直接转换节点编号,不用改下标下x,y
由于x,y初始为1,所以这里公式是(x-1)*n+y
c++代码
#include <iostream>
using namespace std;
#define endl '\n'
const int N=240*240+10;
int f[N];
int find(int x) {
if (f[x]==x) return x;
return f[x]=find(f[x]);
}
void merge(int x,int y) {
if (x!=y) f[find(x)]=find(y);
}
int main() {
ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
int n,m;
cin>>n>>m;
for (int i=1;i<=n*n;i++) f[i]=i;
int x,y;
char fx;
for (int i=1;i<=m;i++) {
cin>>x>>y>>fx;
int idx=(x-1)*n+y,idx1;
if (fx=='R') idx1=idx+1;
else idx1=idx+n;
if (find(idx)==find(idx1)) {
cout << i;
return 0;
}
merge(idx,idx1);
}
cout << "draw";
return 0;
}