行和列>4的可以直接构造,只要交叉着放就好了,比如1 3 5 2 4和2 4 1 3 5,每一行和下一行用不同的方法就能保证没有邻居。

  其他的可以用爆搜,每次暴力和后面的一个编号交换并判断可行性。

  写dfs的话其实行和列>4的就不用刻意构造了,这个dfs方法可以$O(n*m)$跑出一个构造方案。

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#define ll long long
using namespace std;
const int maxn=500010;
int n, m;
int pos[maxn];
int dx[4]={0, 1, 0, -1}, dy[4]={1, 0, -1, 0};
inline void read(int &k)
{int f=1; k=0; char c=getchar();while(c<'0' || c>'9') c=='-' && (f=-1), c=getchar();while(c<='9' && c>='0') k=k*10+c-'0', c=getchar();k*=f;
}
bool check(int i, int j)
{int x=(i-1)/m+1, y=(i-1)%m+1, x2=(j-1)/m+1, y2=(j-1)%m+1;for(int k=0;k<4;k++) if(x+dx[k]==x2 && y+dy[k]==y2) return 1;return 0;
}
bool dfs(int i)
{if(i==n*m+1) return 1;int x=(i-1)/m+1, y=(i-1)%m+1;for(int j=i;j<=n*m;j++){swap(pos[i], pos[j]);if(x!=1 && check(pos[i], pos[(x-2)*m+y])) continue;if(y!=1 && check(pos[i], pos[(x-1)*m+y-1])) continue;if(dfs(i+1)) return 1;swap(pos[i], pos[j]);}return 0;
}
int main()
{read(n); read(m);for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) pos[(i-1)*m+j]=(i-1)*m+j;if(!dfs(1)) return puts("NO"), 0;puts("YES");for(int i=1;i<=n;i++, puts("")) for(int j=1;j<=m;j++) printf("%d ", pos[(i-1)*m+j]);
} 

View Code

转载于:https://www.cnblogs.com/Sakits/p/8099234.html

Codeforces 906B. Seating of Students(构造+DFS)相关推荐

  1. CodeForces - 1341F Nastya and Time Machine(dfs+构造)

    题目链接:点击查看 题目大意:给出一棵树,现在要求从点1出发遍历所有的结点一遍后再回到点1,额外给出一个时光机,可以到某个节点的任意时刻,需要满足的条件如下: 初始时在节点 1 ,时间为 0 每次操作 ...

  2. CodeForces - 1316D Nash Matrix(构造+dfs)

    题目链接:点击查看 题目大意:给出一个 n * n 的矩阵,初始时每个格子都为空,现在要求我们自己用 ' R ' , ' L ' , ' U ' , ' D ' 和 ' X ' 填充,分别表示在每个格 ...

  3. Codeforces Round #453 (Div. 1) D. Weighting a Tree 构造 + dfs树

    传送门 文章目录 题意: 思路: 题意: 给你一颗nnn个点的图,每个点都有一个点权cic_ici​,要求你给每个边赋一个权值kik_iki​,要求对于每个点与他相连的边的权值之和等于这个点的点权ci ...

  4. CodeForces 1396E Distance Matching(构造+树的重心+dfs+set)

    problem 洛谷链接 solution 这种要求值和恰好为 kkk 的题目,一般要先明确值和的取值范围. 所以我们先来确定一下值和的最小值和最大值. 将一条路径拆成若干条边,单独计算每条边对路径的 ...

  5. Codeforces 1246D/1225F Tree Factory (构造)

    题目链接 https://codeforces.com/contest/1246/problem/D 题解 首先考虑答案的下界是\(n-1-dep\) (\(dep\)为树的深度,即任何点到根的最大边 ...

  6. CodeCraft-20 (Div. 2) D. Nash Matrix 构造 + dfs

    传送门 文章目录 题意: 思路: 题意: 给定一个n∗nn*nn∗n的矩阵,每个点上面都有一个xi,yix_i,y_ixi​,yi​,表示这个点到xi,yix_i,y_ixi​,yi​这个点停下,当x ...

  7. 图论 ---- 构造DFS树的思想 K - Boomerangs Gym - 102001K

    题目链接 题目大意: 解题思路: 启发性思考首先我们先图切成dfs树,然后给图一个稳定结构之后,我们就可以去构造了 对于每个点我们从第底端开始构造每次把每次点的儿子两两匹配,如果是奇数个儿子就把多出来 ...

  8. Codeforces 1276C/1277F Beautiful Rectangle (构造)

    题目链接 http://codeforces.com/contest/1276/problem/C 题解 嗯,比赛结束前3min想到做法然后rush不出来了--比赛结束后又写了15min才过-- 以下 ...

  9. Codeforces Codeforces Round #383 (Div. 2) E (DFS染色)

    题目链接:http://codeforces.com/contest/742/problem/E 题意: 有一个环形的桌子,一共有n对情侣,2n个人,一共有两种菜. 现在让你输出一种方案,满足以下要求 ...

  10. codeforces 580C Kefa and Park(DFS)

    题目链接:http://codeforces.com/contest/580/problem/C #include<cstdio> #include<vector> #incl ...

最新文章

  1. springboot发送http请求
  2. 正则表达式(overall)
  3. linux top 历史,阿里工程师眼中的linux top命令
  4. 没文化连广告都看不懂—“网易密码信破解”【续】
  5. 深入String、StringBuilder、StringBuffer
  6. 支付宝通知侦听器是什么_使用SWTEventHelper清除SWT侦听器通知
  7. iOS平台快速发布HT for Web拓扑图应用
  8. python selenium 处理弹窗_python-selenium -- 弹出框处理
  9. Android项目图像资源保存在,将图像从drawable保存到android中的内部文件存储
  10. 阿里P8架构师分享:如何从0到1设计一个类Dubbo的RPC框架
  11. 如何在arcmap中使用取色器
  12. 技术交底书(一)-----一种移动终端无需充电及移动终端
  13. 程序员的十个层次 你属于哪一层?
  14. 证书链——区块链电子证书系统
  15. ubuntu下解决longene-qq 退出之后再登录出现登录失败的问题
  16. SAP UI5 应用开发教程之八十二 - 采用 OPA5 开发支持页面跳转的 SAP UI5 集成测试用例试读版
  17. STM32开源开发环境的搭建
  18. 彻底分清机器学习中的上采样、下采样、过采样、欠采样【总结】
  19. CSDN访猿团CEO:猿团创业孵化,为何要收26800+10%股权
  20. 庄小焱——个人基本介绍

热门文章

  1. 【渝粤教育】国家开放大学2018年春季 3924T★汽车电器设备构造与检修 参考试题
  2. 【渝粤教育】国家开放大学2018年春季 0706-21T行政管理学导论 参考试题
  3. 【Python小程序】第2讲:如何将TXT文件转换成CSV文件?
  4. 控制系统数字仿真与CAD-第四次实验-附完整代码
  5. Unity 2D角色复活点与复活等待时间设置
  6. [BZOJ5302][HAOI2018]奇怪的背包(DP)
  7. 关于java.lang.reflect.InvocationTargetException。
  8. OC @class关键字
  9. 使用自定义端口连接SQL Server 2008的方法
  10. python基础:集合操作