游戏结束就等一连接的边出现了自环
考虑并查集的思想,每进行一步,先判断这两个点是不是在一个集合中,如果不在一个集合就将这两个点所在的集合合并,当出现了在一个集合中就说名连接这两个点就会出现自环,就可以输出答案了。
import java.util.*;
public class Main {
static final int N = 210;
static int[] p = new int[N * N];
static int n, m;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
for (int i = 1; i <= n * n; i++) p[i] = i;
for (int i = 1; i <= m; i++) {
int a = sc.nextInt(), b = sc.nextInt(), c = sc.next().charAt(0);
int t1 = getOne(a, b), t2;
if (c == 'D') t2 = getOne(a + 1, b);
else t2 = getOne(a, b + 1);
int p1 = find(t1), p2 = find(t2);
if (p1 == p2) {
System.out.println(i);
return;
}
p[p1] = p2;
}
System.out.println("draw");
}
static int find(int u) {
if (p[u] != u) p[u] = find(p[u]);
return p[u];
}
static int getOne(int x, int y) {
return --x * n + --y;
}
}