首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

找出矩阵区域最小数值

2012-09-13 
找到矩阵区域最小数值找到矩阵区域最小数a[i][j]满足条件a[i][j]a[i1][j],a[i][j]a[i][j1],a[i][j]a[i-

找到矩阵区域最小数值

找到矩阵区域最小数值a[i][j]

满足条件

a[i][j]<a[i+1][j],

a[i][j]<a[i][j+1],

a[i][j]<a[i-1][j],

a[i][j]<a[i][j-1]


方法为:

1. 取矩阵中间Row,找到最小值,记录curRow,curCol,curMin

2. 将此最小值与四周值比较,如果有比curMin小的值,则更新curRow,curCol,curMin,重复第二步。如果不存在,则返回当前值,即为结果。


#include <cstdio>const int N = 5;const int M = 5;int a[N][M] = {1, 12, 3, 1, -23,     7, 9, 8, 5, 6,   4, 5, 6, -1, 77,   7, 0, 35, -2, -4,   6, 83, 1, 7, -6};int direct[4][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };void findLocalMin(int& resRow, int& resCol){int curRow = N / 2;int curCol = 0;int curMin = a[curRow][curCol];for(int i = 0; i < M; i++){if (a[curRow][i] < curMin){curMin = a[curRow][i];curCol = i;}}bool flag = false;while(true){flag = true;for (int i = 0; i < 4; i++){int tempRow = curRow + direct[i][0];int tempCol = curCol + direct[i][1];if (tempRow < N && tempCol < N && a[curRow][curCol] > a[tempRow][tempCol]){curMin = a[tempRow][tempCol];curRow = tempRow; curCol = tempCol;flag = false;break;}}if (flag){resRow = curRow; resCol = curCol;return;}}};int main(){int resRow, resCol;findLocalMin(resRow, resCol);printf("%d", a[resRow][resCol]);return 0;}


热点排行