项目七(2.0)

按照下面的要求修改寻找峰点的程序:
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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值