poj 1021 2D-Nim 图论

简介:

      判断点阵是否是同构,乱搞了个·n^3的方法,就是判断每个点到四周的距离,然后记录下来,排个序,如果两个完全一样则为YES,否则为NO。

      应该在dfs上加优化就可以降到n^2.但感觉意义不大

一开始WA了2次,最后发现时结构体的构造函数没有初始化

/*
author:jxy
lang:C/C++
university:China,Xidian Unkjiversity
**If you need to reprint,please indicate the source**
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int dir[4][2]={0,1,1,0,0,-1,-1,0};
int w,h,n;
int org[102][102];
struct node
{
    int d[4];
    node(int *p)
    {
        memcpy(d,p,4*sizeof(int));
        if(d[0]+d[2]>d[1]+d[3])
        {
            swap(d[0],d[1]);
            swap(d[2],d[3]);
        }
        if(d[1]>d[3])swap(d[1],d[3]);
        if(d[0]>d[2])swap(d[0],d[2]);
    }
    bool operator <(const node &a) const
    {
        for(int i=0;i<4;i++)
        {
            if(d[i]<a.d[i])return 1;
            if(d[i]>a.d[i])return 0;
        }
        return 1;
    }
    bool operator ==(const node &a) const
    {
        return memcmp(d,a.d,4*sizeof(int))==0;
    }
};
vector<node> line[2];
int flag=0;
int dfs(int &x,int &y)
{
    int d[4];
    for(int i=0;i<4;i++)
    {
        int tx=x+dir[i][0],ty=y+dir[i][1];
        d[i]=0;
        while(org[tx][ty])
        {
            d[i]++;
            tx+=dir[i][0];ty+=dir[i][1];
        }
    }
    if(d[1]+d[3]&&d[0]+d[2])
    {
        line[flag].push_back(node(d));
    }
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        line[0].clear();
        line[1].clear();
        scanf("%d%d%d",&w,&h,&n);
        int i,j,x,y;
        memset(org,0,sizeof(org));
        for(i=0;i<n;i++)
        {
            scanf("%d%d",&x,&y);
            x++,y++;
            org[x][y]=1;
        }
        flag=0;
        for(i=1;i<=w;i++)
          for(j=1;j<=h;j++)
          {
              if(org[i][j])dfs(i,j);
          }
        memset(org,0,sizeof(org));
        for(i=0;i<n;i++)
        {
            scanf("%d%d",&x,&y);
            x++,y++;
            org[x][y]=1;
        }
        flag=1;
        for(i=1;i<=w;i++)
          for(j=1;j<=h;j++)
          {
              if(org[i][j])dfs(i,j);
          }
        sort(line[0].begin(),line[0].end());
        sort(line[1].begin(),line[1].end());
        if(line[0]==line[1])
        {
            puts("YES");
        }
        else puts("NO");
    }
}


目录
相关文章
|
SQL 存储 缓存
Mybatis的一级缓存,二级缓存过期时间分析
Mybatis的一级缓存,二级缓存过期时间分析
852 0
|
5月前
|
JSON API 数据格式
淘宝天猫商品列表API接口(附代码示例)
淘宝天猫商品列表API接口是获取淘宝/天猫商品数据的工具,支持按关键词、价格区间、销量等条件筛选商品,返回商品标题、价格、销量等基本信息,适用于商品分析与竞品调研。使用时需注册开发者账号并调用HTTP GET/POST请求,响应数据为JSON格式。示例代码展示了如何用Python发送请求并处理返回数据。
173 18
|
4月前
|
前端开发 Java 微服务
2025 版 Java 学习路线图之技术方案与实操指南详解
这是一份详尽的Java学习路线图,涵盖从入门到精通的全流程。基础阶段包括环境搭建、语法基础与面向对象编程;进阶阶段深入数据结构、算法、多线程及JVM原理;框架阶段学习Spring、MyBatis等工具;数据库阶段掌握SQL与NoSQL技术;前端阶段了解HTML、CSS及JavaScript框架;分布式与微服务阶段探讨容器化、服务注册与发现;最后通过项目实战提升性能优化与代码规范能力。资源地址:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)。
276 7
|
域名解析 存储 缓存
DNS:DNS域名解析过程及原理
DNS:DNS域名解析过程及原理
813 1
|
10月前
|
消息中间件 NoSQL 前端开发
知识付费卖课和在线教育系统源码
随着越来越多的教师和内容创作者希望通过专属平台售卖课程,搭建一套知识付费和在线教育系统成为行业热点。本文详细介绍了系统的架构设计、核心功能模块、技术实现、源码示例及开发建议,帮助开发者快速实现课程发布、学员学习、订单支付等功能。
452 6
|
11月前
|
缓存 Java 数据库连接
Hibernate:Java持久层框架的高效应用
通过上述步骤,可以在Java项目中高效应用Hibernate框架,实现对关系数据库的透明持久化管理。Hibernate提供的强大功能和灵活配置,使得开发者能够专注于业务逻辑的实现,而不必过多关注底层数据库操作。
205 1
|
12月前
|
自然语言处理 算法 搜索推荐
NLP中TF-IDF算法
TF-IDF(词频-逆文档频率)是一种用于信息检索与数据挖掘的加权技术,通过评估词语在文档中的重要性来过滤常见词语,保留关键信息。本文介绍了TF-IDF的基本概念、公式及其在Python、NLTK、Sklearn和jieba中的实现方法,并讨论了其优缺点。TF-IWF是TF-IDF的优化版本,通过改进权重计算提高精度。
632 1
|
12月前
|
存储 关系型数据库 MySQL
MySQL 如何存储地理信息
MySQL 如何存储地理信息
1203 1
|
监控 Linux 数据处理
lslocks:Linux系统中的锁信息查看利器
`lslocks`是Linux工具,用于查看系统上的文件锁信息,帮助诊断进程同步问题。它显示持有锁的进程、锁类型(如POSIX、flock)和状态。通过简洁的输出,用户能识别死锁和资源争用,优化性能。结合其他命令如`grep`和`awk`可增强分析能力。需适当权限运行,定期监控以预防并发访问问题,处理死锁时要谨慎。
|
数据可视化 API 索引
DOTween教程☀️DOTween的使用教程
DOTween教程☀️DOTween的使用教程