本文主要是介绍题目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,设矩阵是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; }
-
这篇关于题目1250:矩阵变换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!