实验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;
}

PTA实验7-2-3 求矩阵的局部极大值 (15分)的更多相关文章

  1. PTA习题6-8 统计一行文本的单词个数 (15分)

    参考<c和指针>里面运用strtok函数打印空白标记符(如\n,\t)的程序改写而成的代码 在之前我自己写了一个60行的链表版本的统计程序 相比之下这个strtok函数的程序要简洁明了的多 ...

  2. PTA实验报告(循环 数组 函数)

    一.循环PTA实验作业 题目一.7-2 求平方根序列前N项和 1.本题PTA提交列表 2.设计思路 本题调用了sqrt数学函数计算平方根,其次只用了一层循环,计算平方根之后使用循环累加计算总和sum. ...

  3. SDUT-2130_数据结构实验之数组一:矩阵转置

    数据结构实验之数组一:矩阵转置 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 数组--矩阵的转置 给定一个m*n的矩阵 ...

  4. POJ 1151 Atlantis(经典的线段树扫描线,求矩阵面积并)

    求矩阵的面积并 采用的是区间更新 #include <iostream> #include <stdio.h> #include <string.h> #inclu ...

  5. HDU 1828 / POJ 1177 Picture (线段树扫描线,求矩阵并的周长,经典题)

    做这道题之前,建议先做POJ 1151  Atlantis,经典的扫描线求矩阵的面积并 参考连接: http://www.cnblogs.com/scau20110726/archive/2013/0 ...

  6. MATLAB中求矩阵非零元的坐标

    MATLAB中求矩阵非零元的坐标: 方法1: index=find(a); [i,j]=ind2sub(size(a),index); disp([i,j]) 方法2: [i,j]=find(a> ...

  7. C语言第一次实验报告————PTA实验1.2.3内容

    一.PTA实验作业 题目1.温度转换 本题要求编写程序,计算华氏温度100°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1.实验代 ...

  8. 一、PTA实验作业

    一.PTA实验作业 1.题目1: 6-2 线性表元素的区间删除 2. 设计思路 定义i,j; 判断L,minD,maxD; while(i<l->Last) { 判断所有满足条件的数,de ...

  9. POJ 1151 Atlantis 求矩阵面积并 扫描线 具体解释

    题意: 给定n个矩阵的左下角和右上角坐标,求矩阵面积并(矩阵总是正放的,即与x轴y轴都平行) 思路: 扫描线裸题 http://www.cnblogs.com/fenshen371/p/3214092 ...

随机推荐

  1. MySQL高可用主从复制部署

    原文转自:https://www.cnblogs.com/itzgr/p/10233932.html作者:木二 目录 一 基础环境 二 实际部署 2.1 安装MySQL 2.2 初始化MySQL 2. ...

  2. 【Python机器学习实战】决策树与集成学习(四)——集成学习(2)GBDT

    本打算将GBDT和XGBoost放在一起,但由于涉及内容较多,且两个都是比较重要的算法,这里主要先看GBDT算法,XGBoost是GBDT算法的优化和变种,等熟悉GBDT后再去理解XGBoost就会容 ...

  3. Swing常用容器

    3.Swing(AWT的子类) 3.1窗口.面板 public class myJFrame extends JFrame { //JFrame是一个顶级窗口 public myJFrame() { ...

  4. javascript(1)简介

    点击查看代码 ### javascript 1.JavaScript简介 javascript是一种轻量级的脚本语言,可以部署在多种环境,最常见的部署环境就是浏览器, 脚本语言: 它不具备开发操作系统 ...

  5. php-fpm进程数控制

    一.名词解释 CGI是Common Gateway Interface(通用网管协议),用于让交互程序和Web服务器通信的协议.负责处理URL的请求,启动一个进程,将客户端发送的数据作为输入,有Web ...

  6. git 提交本地项目

    在新文件夹中] 1.右键 git bash here,执行 2.git init 生成.git文件,存在则跳过 依次执行 1.git add . 2.git commit -m "提交信息& ...

  7. 【转载】小心 int 乘法溢出!

    C/C++ 语言里, 绝大部分平台上 int 类型是 32 位的, 无论你的操作系统是否是 64 位的. 而一些常用的函数, 如 malloc(), 它接受的参数是 size_t 类型: void * ...

  8. HTML+CSS+JS设计注册页面

    HTML实战--设计一个个人信息填写界面 应用的技术:HTML+CSS+JS CSS和JS是套用的模板,主要练习了表单的验证和正则表达式的使用 效果图: 代码: <!DOCTYPE html&g ...

  9. (转载)深入理解MDL元数据锁

    作者:MySQL技术本文为作者原创,转载请注明出处:https://www.cnblogs.com/kunjian/p/11993708.html 前言: 当你在MySQL中执行一条SQL时,语句并没 ...

  10. Docker系列(4)- run的流程和docker原理

    回顾HelloWorld流程 底层工作原理 Docker是怎么工作的? Docker是一个Client-Server结构的系统,Docker的守护进程运行在宿主机上.通过Socket从客户端访问 Do ...