实验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. 使用vbs调用excel中的宏

    使用vbs打开excel文件,并且传递参数调用excel中的macro,自动化完成excel文件的制作. Set oExcel = createobject("Excel.Applicati ...

  2. Docker详解(一)——

    Docker详解 https://www.cnblogs.com/antLaddie/p/14276726.html

  3. Django分页组件——Paginator

    from django.core.paginator import Paginator #导入Paginator objects = ['john','paul','george','ringo',' ...

  4. 为何GRE可以封装组播报文而IPSEC却不行?

    Author       : Email         : vip_13031075266@163.com Date          : 2021.01.24 Copyright : 未经同意不得 ...

  5. .net中使用JSON

    在.NET使用JSON作为数据交换格式 ASP.NET中JSON的序列化和反序列化 三种方式: 使用System.Web.Script.Serialization.JavaScriptSerializ ...

  6. DHCP的原理和配置

    前言 在大型企业网络中,会有大量的主机或设备需要获取IP地址等网络参数.如果采用手工配置,工作量大且不好管理,如果有用户擅自修改网络参数,还有可能会造成 IP地址冲突等问题.使用动态主机配置协议DHC ...

  7. CommonsBeanutils1 分析笔记

    1.PropertyUtils.getProperty commons-beanutils-1.9.2.jar 包下的 PropertyUtils#getProperty方法相对于getXxx方法,取 ...

  8. 关联数组VS索引数组

    关联数组和常规说的数组类似,它包含标量抄数据,可用索引值来单独选择这些数据,和常规数组不同的是, 关联数组的索引值不是非负的整数而是任意的标量袭.这些标量称为百Keys,可以在以后用于检索数组中的数值 ...

  9. TP5.0版本mysql查询语句 闭包

    Db::name('tiwen') ->where('user_id', $user_id) ->where(function ($query) { $query->where(fu ...

  10. 解决跨域、同源策略-React中代理的配置

    React中代理的配置 主要是解决同源策略的问题 何为同源策略? 因为我们React在3000端口,Vue在8080端口,而后台接口往往在5000,这种不同的端口之间就是一种跨域的问题了 axios发 ...