实验7-2-3 求矩阵的局部极大值 (15分)

给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。

输入格式:
输入在第一行中给出矩阵A的行数M和列数N(3≤M,N≤20);最后M行,每行给出A在该行的N个元素的值。数字间以空格分隔。

输出格式:
每行按照“元素值 行号 列号”的格式输出一个局部极大值,其中行、列编号从1开始。要求按照行号递增输出;若同行有超过1个局部极大值,则该行按列号递增输出。若没有局部极大值,则输出“None 总行数 总列数”。

输入样例1:

4 5
1 1 1 1 1
1 3 9 3 1
1 5 3 5 1
1 1 1 1 1

输出样例1:

9 2 3
5 3 2
5 3 4

输入样例2:

3 5
1 1 1 1 1
9 3 9 9 1
1 5 3 5 1

输出样例2:

None 3 5

方案一:一维数组

//求矩阵的局部极大值
#include <stdio.h>
#include <stdlib.h> int main(void)
{
int m,n;
int i,j,k;
int *a;
int noExist = 1;
scanf("%d%d", &m, &n);
a = (int*)malloc(sizeof(int)*m*n);
for(i=0;i<m*n;i++){
scanf("%d", &a[i]);
}
for(i=1;i<m-1;i++){ //从矩阵的第二行开始,到倒数第一行结束
for(j=1;j<n-1;j++){ //从矩阵的第二列开始,到倒数第一行结束
k = n*i+j;
if(a[k]>a[k-1] && a[k]>a[k+1] && a[k]>a[k-n] && a[k]>a[k+n]){//判断是否满足局部最大
printf("%d %d %d\n", a[k], i+1, j+1);
noExist = 0;
}
}
}
if(noExist)printf("None %d %d", m, n);//在循环中没有发现有局部最大值,输出None
free(a); return 0;
}

方案二:二维数组
在此方案中,需要用到二级指针,
定义int*类型的指针存储矩阵某一行的元素
定义int**类型的指针存储指针的地址

//求矩阵的局部极大值
#include <stdio.h>
#include <stdlib.h> int main(void)
{
int m,n;
int i,j;
int **a; //二级指针,指向指针的指针
int *b;
int key;
int noExist = 1;
scanf("%d%d", &m, &n);
a = (int**)malloc(sizeof(int*)*m);
for(i=0;i<m;i++){
b = (int*)malloc(sizeof(int)*n); //申请一个m个int大小的空间
a[i] = b; //将b的地址写进a
for(j=0;j<n;j++){
scanf("%d", &b[j]);
}
}
for(i=1;i<m-1;i++){ //从矩阵的第二行开始,到倒数第一行结束
for(j=1;j<n-1;j++){ //从矩阵的第二列开始,到倒数第一列结束
b = a[i];
key = b[j];
if(key>b[j-1] && key>b[j+1]){
b = a[i-1]; //切换到上一行
if(key>b[j]){
b = a[i+1]; //切换到下一行
if(key>b[j]){
printf("%d %d %d\n", key, i+1, j+1);
noExist = 0;
}
}
}
}
}
if(noExist)printf("None %d %d", m, n); 在循环中没有发现有局部最大值,输出None
for(i=0;i<m;i++){ //释放申请的空间
b = a[i];
free(b);
}
free(a); return 0;
}

最新文章

  1. iOS 的文字滚动条效果的实现
  2. FIFO深度
  3. Robotlegs2 学习笔记 -- SwiftSuspenders 2.x (1)
  4. Python中使用ElementTree解析xml
  5. Tesseract——OCR图像识别 入门篇
  6. 生产环境CentOS服务器系统安全配置
  7. python高级编程之(类级):子类内建类型
  8. C++ 常见容器
  9. sql sever 基础知识及详细笔记
  10. Spring框架——IOC依赖注入
  11. git 的学习使用记录
  12. Java对数
  13. Scrapy基础(七)————图片的简单下载
  14. 强大的拖拽组件:React DnD 的使用
  15. easyui多图片上传+预览切换+支持IE8
  16. tomcat运行时为什么不能删除war
  17. 经典SQL语句--很全面
  18. sql server @@ROWCOUNT 会被 if 给 清 0
  19. 【Spring源码分析系列】启动component-scan类扫描加载过程
  20. 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.2 ruleflow-group&amp;salience

热门文章

  1. Spring Boot 入门系列(二十五)读取配置文件的几种方式详解!
  2. MySQL——主从复制
  3. ajax获取图片
  4. Apache网页优化
  5. HearthbuddyHelper已经开源
  6. HTTP证书申请,设置应用程序服务器使用HTTPS
  7. Docker安装GitLab与Runner(网关),常规设置,自动化用到k8s+token
  8. CodeForce-811B Vladik and Complicated Book(水题)
  9. eclipse中的一些快捷键
  10. Java面向对象系列(5)- 构造器详解