题目1250:矩阵变换

来源:互联网 发布:python 条件语句 编辑:程序博客网 时间:2024/06/05 02:47
题目描述:

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

输入:

输出:

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

样例输入:
31 10 91 1 21 0 130 1 00 1 21 0 10
样例输出:
YesNo
思路:
1,设矩阵是A[n][n]
2,X=sum(A[i][j]其中i+j是奇数,Y=sum(A[i][j])其中i+j是偶数,则有X=Y
3,任意一个元素不大于周围四个元素的和
4,以上两点是充要条件


AC Code:

#include <iostream>#include <cstdio>using namespace std;int maze[11][11];int n;int main(){    while(cin>>n && n){        for(int i= 0; i< n; ++i){            for(int j= 0; j< n; ++j){                scanf("%d",&maze[i][j]);            }        }        int x= 0, y= 0;        for(int i= 0; i< n; ++i){            for(int j= 0; j< n; ++j){                if((i+j)&1){                    x+= maze[i][j];                }else{                    y+= maze[i][j];                }            }        }        if(x!= y){            printf("No\n");            continue;        }        int sum;        bool ok=true;        for(int i= 0; i< n && ok; ++i){            for(int j= 0; j< n && ok; ++j){                sum= 0;                if(i> 0){                    sum+=maze[i-1][j];                }                if(j> 0){                    sum+= maze[i][j-1];                }                if(i< n-1){                    sum+= maze[i+1][j];                }                if(j< n-1){                    sum+= maze[i][j+1];                }                if(maze[i][j]> sum){                    ok= false;                    break;                }            }        }        if(ok){            printf("Yes\n");        }else{            printf("No\n");        }    }return 0;}


0 0
原创粉丝点击