时间限制:0.25s

空间限制:4M

题意:

有N*N的矩阵(n<=3),对所有i,j<=n有G[i][j]<=9,定义f[i][j]为G[i][j]四周大于它的数的个数(F[i][j]<=4),

现在 给出n和F[i][j],输出一种可形的G。

Sample Input

3

1 2 1

1 2 1

1 1 0

Sample Output

1 2 3

1 4 5

1 6 7






Solution:

                 观察给出的F矩阵,以样例为例

 1  2  1
 1  2  1
 1  1  0

首先知道

F[3][3]==0,那么G[3][3]一定是最大的,令当前填的数为K(K=N*N)

这时将F[3][3],四周的所有F[i][j]减1,变成

 1  2  1
 1  2  0
 1  0  #

(#号代表已填)

这样重复上面的步骤,每次做完执行k--

直到发现

 1  2  0
 0  0  #
 #  #  #

这时对应的G为

  *   *   *
  *   *   7
  6   8   9

(*代表还未填)

F出现两个以上接触的0,那么同时填这些接触的0为K

此时F矩阵为

  0   1   0
 #  #  #
 #  #  #

G矩阵为

  *   *   *
  5   5   7
  6   8   9

最后得到G矩阵

  3   3   4
  5   5   7
  6   8   9

这样就得到了一种满足要求的输出

最后总结就是,令k=n*n,对F填一个F[i][j]==0的位置为k,如果有联通的0,将这些为0的位置全部填为K,

再将填了数的位置的四周的F[i][j]减一。

如果填完所有0的位置后,G矩阵已经填完那么输出G

G没有填完的话,输出“No Solution”;

参考代码:

#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
struct node {
int x, y;
} p;
int dirx[4] = {0, 0, -1, 1}, diry[4] = {1, -1, 0, 0};
int g[5][5], f[5][5], pd[5][5];
int n, t, k;
queue<node> ql;
void BFS (int x, int y, int k) {
node p;
for (int i = 0; i <= 3; i++) {
p.x = x + dirx[i], p.y = y + diry[i];
if (f[p.x][p.y] == 0) {
g[p.x][p.y] = k, t++;
f[p.x][p.y] = -1, pd[p.x][p.y] = 1;
BFS (p.x, p.y, k);
}
else if (f[p.x][p.y] > 0)
if ( (--f[p.x][p.y]) == 0) ql.push (p);
}
}
int main() {
cin >> n;
memset (f, -1, sizeof f);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) {
cin >> f[i][j];
if (f[i][j] == 0) {
p.x = i, p.y = j;
ql.push (p);
}
}
k = n * n;
for (node p; !ql.empty(); ql.pop(), k--) {
p = ql.front();
if (pd[p.x][p.y]) continue;
pd[p.x][p.y] = 1, g[p.x][p.y] = k, f[p.x][p.y] = -1, t++;
BFS (p.x , p.y, k);
}
if (t != n * n) cout << "NO SOLUTION";
else
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++)
cout << g[i][j] << ' ';
cout << endl;
}
return 0;
}

SGU 125.Shtirlits的更多相关文章

  1. sgu 125 Shtirlits dfs 难度:0

    125. Shtirlits time limit per test: 0.25 sec. memory limit per test: 4096 KB There is a checkered fi ...

  2. SGU 125 Shtirlits 搜索+可行性剪枝

    500ms时限406ms水过…… 直接枚举肯定超时,需要剪枝. 枚举每个格子的元素,检查其左上角和正上方格子是否满足条件,若不满足不必再向下搜索. 在 这里 看到一个更好的方法: 枚举每个格子是哪个相 ...

  3. Shtirlits - SGU 125(搜索)

    题目大意:B[i, j]表示周围有多少个比它大的数,能否用B数组构造出一个A数组,如果不能输出“NO SOLUTION”. 分析:数据规模比较小,可以直接暴力枚举每个点的值. 代码如下: #inclu ...

  4. ACM 暴力搜索题 题目整理

    UVa 129 Krypton Factor 注意输出格式,比较坑爹. 每次要进行处理去掉容易的串,统计困难串的个数. #include<iostream> #include<vec ...

  5. SGU 分类

    http://acm.sgu.ru/problemset.php?contest=0&volume=1 101 Domino 欧拉路 102 Coprime 枚举/数学方法 103 Traff ...

  6. 今日SGU 5.18

    SGU 125 题意:给你一个数组b[i][j],表示i,j的四周有多少个数字大于它的,问你能不能构造出一个a矩形 收获:dfs  + 剪枝 一行一行的dfs,然后第一行去枚举0-9,下一行判断当前选 ...

  7. Entity Framework 6 Recipes 2nd Edition(12-5)译 -> 自动删除相关联实体

    12-5. 自动删除相关联实体 问题 当一个实体被删除时,你想自动删除它相关联的实体 解决方案 假设你有一个表结构由一个course (科目), course 的classes (课程),以及enro ...

  8. FineUI(开源版)v4.2.2发布(8年125个版本,官网示例突破300个)!

    开源版是 FineUI 的基石,从 2008 年至今已经持续发布了 120 多个版本,拥有会员 15,000 多位,捐赠会员达到 1,200 多位.   FineUI(开源版)v4.2.2 是 8 年 ...

  9. 每周一书-编写高质量代码:改善C程序代码的125个建议

    首先说明,本周活动有效时间为2016年8月28日到2016年9月4日.本周为大家送出的书是由机械工业出版社出版,马伟编著的<编写高质量代码:改善C程序代码的125个建议>. 编辑推荐 10 ...

随机推荐

  1. 【ajax】reqwest

    ded / reqwest All over again. Includes support for xmlHttpRequest, JSONP, CORS, and CommonJS Promise ...

  2. [QT]构建正则表达式测试

    正则表达式是个强大的东西 暂时先记录一个用法: QString str = "Peak memory: KEY s"; QString data = "Peak memo ...

  3. poj 2484 A Funny Game(博弈)

    A Funny Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4639   Accepted: 2855 Desc ...

  4. 折腾iPhone的生活——越狱

    这次我也加入了越狱大军,也不是为的什么免费软件,只是遵从我玩机的本质,既然想要玩透这个机子,当然要所有都试过来,就果断越狱了,关于越狱的好处和坏处,我会在另外一篇博客里阐述,这篇博客主要就说怎么样进行 ...

  5. openstack 启用spice

    Openstack启用spice协议 #控制节点 #安装 ? 1 apt-get install nova-spiceproxy spice-html5 spice-vdagent #配置 nano ...

  6. Google协作平台

    本博文的主要内容有 .Google协作平台的介绍 1.Google协作平台的介绍 https://zh.wikipedia.org/wiki/Google%E5%8D%8F%E4%BD%9C%E5%B ...

  7. [置顶] Linux高编之进程--------fork函数的同步与异步(兄弟子进程和父子孙进程示列)

    前面讲述的fork函数的基本用法,下面通过两个程序来说明fork函数同步与异步之间的关系: <1>通过fork函数实现在父进程下的四个兄弟子进程(即异步) : 函数实现代码: #inclu ...

  8. ExtJs 4: How To Add Grid Cell Tooltip

    最近忙一个项目的时候需要实现鼠标移到grid的某一行上提示消息.花了半天时间才解决.在网上找很久终于有找到一个有用的.我的版本是extjs4. 效果如图 Ext.onReady(function () ...

  9. 2016 GDCPC 省赛总结

    大神们说,要多写博客,多总结,于是很久之前就开了博客,可是一篇文章都没有写,太懒也是,没什么时间也是.现在省赛结束了,也是时候好好总结一下了. 本来一开始,三个人对拿铜牌是很有把握的,在比赛一开始A了 ...

  10. Maven学习系列二(1-5)

    Maven学习系列二(1-5) 本文转自 QuantSeven 博客,讲解精炼易懂,适合入门,链接及截图如下 http://www.cnblogs.com/quanyongan/category/47 ...