1347:【例4-8】格子游戏

格子游戏

二维并查集的经典模板了!

#include<iostream>
using namespace std;
const int N=205;
struct node{
    int x,y;
}f[N][N];
 
node findth(node k){
    return (f[k.x][k.y].x==k.x)&&(f[k.x][k.y].y==k.y)?k:f[k.x][k.y]=findth(f[k.x][k.y]);
}

int main(){
    int n,m;
    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;
        }
    }
    node k1,k2;
    for(int i=1;i<=m;i++){
        int x,y;
        char c;
        scanf("%d%d %c\n",&x,&y,&c);
        if(c=='D'){
            k1=findth(f[x][y]);
            k2=findth(f[x+1][y]);
        }else{
            k1=findth(f[x][y]);
            k2=findth(f[x][y+1]);
        }
        if((k1.x==k2.x)&&(k1.y==k2.y)){
            printf("%d\n",i);
            return 0;
        }else f[k2.x][k2.y]=k1;
    }
    printf("draw\n");
    return 0;
}
posted @ 2021-10-30 18:28  Rekord  阅读(277)  评论(0编辑  收藏  举报