按照下面的要求修改寻找峰点的程序:
1.
打印出网格中峰点的数目。
2.
打印出谷点的位置。假定谷点是一个比邻接点海拔都要低的点。编写一个名为
isValley
的
函数供你的程序调用 。
3. 找出并打印海拔数据中最高点和最低点的位置及其海拔。编写一个名为 extremes 的函数
供你的程序调用。(暂时还未封装)
4.
修改函数
isPeak(),
使用
8
个邻接点来判断峰点,而不再是只使用
4
个邻近点判断
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
using namespace std;
#define N 64
bool isPeak(int grid[N][N], int i, int j); //峰点
bool isValley(int low[N][N], int i, int j);//谷点
int extremes(int values[N][N], int i, int j);//最值
int main(){
int nrows, ncols;
int map[N][N];
string filename;
ifstream file;
cout <<"请输入文件名.\n";
cin >> filename;
file.open(filename.c_str());
if(file.fail()){
cerr<<"打开输入文件出错.\n";
exit(1);
}
file>>nrows>>ncols;
if(nrows > N || ncols > N){
cerr<<"网格太大,调整程序.\n";
exit(1);
}
//从数据文件读数据到数组
for(int i=0; i<nrows; ++i){
for(int j=0; j<ncols; ++j){
file>>map[i][j];
}
}
int count = 0;
//判断并打印峰值位置
for(int i=1;i<nrows-1; ++i){
for(int j=1;j<ncols-1; ++j){
if(isPeak(map, i, j)){
cout<<"峰值出现在行: "<<i<<" 列: "<<j<<endl;
count++;
}
}
}
cout<<"峰点的个数有: "<<count<<endl;
cout<<endl;
//判断并打印谷点位置
for(int i=1;i<nrows-1; ++i){
for(int j=1;j<ncols-1; ++j){
if(isValley(map, i, j)){
cout<<"谷点出现在行: "<<i<<" 列: "<<j<<endl;
}
}
}
cout<<endl;
int max = map[1][1];
int min = map[0][0];
int r = 0;
int c = 0;
extremes(map, nrows, ncols);
for(int i=1;i<nrows-1; ++i){
for(int j=1;j<ncols-1; ++j){
if(max<=extremes(map, i, j)){
max = extremes(map, i, j);
r = i;
c = j;
}
}
}
cout<<"峰点出现在行: "<<r<<" 列: "<<c<<endl;
system("pause");
//关闭文件
file.close();
//结束程序
return 0;
}
//峰点
bool isPeak(int grid[N][N], int i, int j){
if((grid[i-1][j]<grid[i][j]) &&
(grid[i+1][j]<grid[i][j]) &&
(grid[i][j-1]<grid[i][j]) &&
(grid[i][j+1]<grid[i][j]) &&
(grid[i-1][j+1]<grid[i][j])&&
(grid[i-1][j-1]<grid[i][j])&&
(grid[i+1][j+1]<grid[i][j])&&
(grid[i+1][j-1]<grid[i][j])) {
return true;
}else{
return false;
}
}
//谷点
bool isValley(int low[N][N], int i, int j){
if((low[i-1][j]>low[i][j]) &&
(low[i+1][j]>low[i][j]) &&
(low[i][j-1]>low[i][j]) &&
(low[i][j+1]>low[i][j])) {
return true;
}else{
return false;
}
}
//最值
int extremes(int values[N][N], int r, int c){
int max = values[0][0];
int min = values[0][0];
for(int i=0; i<r; i++){
for(int j=0; j<c; j++){
if(max <= values[r][c]){
max = values[r][c];
}
}
}
return max;
}
。