• 九度oj 题目1250:矩阵变换


    题目描述:

    对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一,
    现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。

    输入:
    输出:

    如果可以变换得到输出"Yes",否则"No"。
    存在多组数据,每组数据第一行一个正整数n(n<=10),表示一个n*n的矩阵,然后紧跟n行,每行n个整数。当n为0时,测试结束。

    样例输入:
    3
    1 10 9
    1 1 2
    1 0 1
    3
    0 1 0
    0 1 2
    1 0 1
    0
    样例输出:
    Yes
    No

     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <iostream>
     6 #include <cmath>
     7 int matrix[12][12];
     8 int dir[][2] = {{0,1},{0,-1},{1,0},{-1,0}};
     9 
    10 int main(int argc, char const *argv[])
    11 {
    12     int n;
    13     while(scanf("%d",&n) != EOF && n != 0)  {
    14         int x = 0, y = 0;
    15         for(int i = 0; i < n; i++) {
    16             for(int j = 0; j < n; j++) {
    17                 scanf("%d",&matrix[i][j]);
    18                 if((i + j) & 1) {
    19                     x = x + matrix[i][j];
    20                 }
    21                 else {
    22                     y = y + matrix[i][j];
    23                 }
    24             }
    25         }
    26         if(x != y) {
    27             puts("No");
    28             continue;
    29         }
    30         bool isOk = true;
    31         for(int i = 0; i < n && isOk; i++) {
    32             for(int j = 0; j < n && isOk; j++) {
    33                 int sum = 0;
    34                 for(int p = 0; p < 4; p++) {
    35                     int tmpx = i + dir[p][0];
    36                     int tmpy = j + dir[p][1];
    37                     if(tmpx >= 0 && tmpx < n && tmpy >= 0 && tmpy < n) {
    38                         sum = sum + matrix[tmpx][tmpy];
    39                     }
    40                 }
    41                 if(matrix[i][j] > sum) {
    42                     isOk = false;
    43                     break;
    44                 }
    45             }
    46         }
    47         if(isOk) {
    48             puts("Yes");
    49         }
    50         else {
    51             puts("No");
    52         }
    53 
    54 
    55     }
    56     return 0;
    57 }

    这道题关键是找到判断的充要条件,这里的充要条件有两个(摘自http://www.cnblogs.com/liangrx06/p/5083814.html),

    (1)X=sum(A[i][j]其中i+j是奇数,Y=sum(A[i][j])其中i+j是偶数,则有X=Y
    (2)任意一个元素不大于周围四个元素的和

  • 相关阅读:
    Cronolog切割tomcat日志
    使用TortoiseGit+码云管理项目代码
    POI使用 (4.0) 常用改动
    MySQL-with rollup函数运用
    CentOS7使用yum安装MySQL8.0
    java 8 新特性之Stream的排序/分类
    java阳历转农历
    MyBatis SQL xml处理小于号与大于号
    mysql update不能直接使用select的结果
    Java面试中遇到的坑【填坑篇】
  • 原文地址:https://www.cnblogs.com/jasonJie/p/5769603.html
Copyright © 2020-2023  润新知