数据结构课后题目源码

来源:互联网 发布:usgs遥感数据下载 编辑:程序博客网 时间:2024/06/07 17:25

题目描述:若矩阵Am*n中的某一元素A[i][j]是第i行中的最小值,同时又是第j列的最大值,则称此元素为该矩阵的一个鞍点。试编写一个算法找出一个矩阵中的鞍点,并返回他的下标(如果有的话)。

在源码注释中有我这个算法的思想的详细描述,下面是博主自己写的源码,若有错误,欢迎大家评论指出。

// ex4-12.cpp : Defines the entry point for the console application.//这是一个找矩阵鞍点的算法,所谓的矩阵的鞍点指的是若A[i][j]是第i行的最小值,且是第j列的最大值,这A[i][j]为矩阵的一个鞍点//我的算法思想是先找到第i行的最小值,并记录下来,本算法中是用min记录的,同时记录下它的列数minj,如后再在第minj列中找到该列的最大值max,比较//min和max是否相等,若想等则说明A[i][j]为矩阵的一个鞍点,这样逐行检测下去,便可全部找到矩阵的鞍点,算法时间复杂度为O(i*j);#include "stdafx.h"#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){int A[3][3];                   //数组声明,这里为了简单我直接确定了数组的大小int minj;                      //用于记录找到的最小值的列数int max;                      //用于存储找到的第j列的最大值int min;                     //用于存储找到的第i行的最小值for (int i = 0; i < 3; i++){//输入矩阵函数for (int j = 0; j < 3; j++){cout << "请输入第" << i + 1 << "行、第" << j + 1 << "列元素: ";cin >> A[i][j];}}cout << "输入矩阵为下: " << endl;for (int i = 0; i < 3; i++){//显示输入矩阵函数for (int j = 0; j < 3; j++){cout << A[i][j] << " ";}cout << endl;}for (int i = 0; i < 3; i++){//查找鞍点函数int j = 1;                     //一个列数循环标记min = A[i][0];                 //最开始让该行的第一个值作为该行的最小值minj = 0;                      //初始化最小值的列数为0while (j < 3){if (min < A[i][j])         //若第i行第j个大于当前min存储的值,则继续比较该行下一个值{j++;}else{min = A[i][j];          //若第i行第j个小于或等于当前min存储的值,则把该值赋给min值,同时记下该值的列数minj = j;              //记下当前最小值的列数j++;}}max = A[0][minj];             //把第minj列的第一个值赋给max,作为当前的最大值int m = 1;                    //用来进行行数计数循环while (m < 3){if (max > A[m][minj]){m++;}else{max = A[m][minj];m++;}}if (max == min)   //若min和max相等则输出该值的值和下标,同时继续找下一个矩阵鞍点{cout << "矩阵的一个鞍点为:" << max << " 下标 i = " << i << " j = " << minj << endl;}}system("pause");return 0;}

0 0
原创粉丝点击