我目前正在编写代码以查找2d峰(任何峰)我使用矢量是因为许多人认为将多维矢量传递给函数会更好。.
(二维峰的定义)对于pos i,j中的任何元素if(它大于或等于pos(i,j-1)&(i,j + 1)&(i-1,j)&(i + 1,j))中的元素]
那是一个高峰
**此代码不完全正确,因为在二进制搜索过程中我没有提到任何约束但是它应该在简单的情况下也可以工作(但是不工作)
#include <iostream>
#include <vector>
#include <conio.h>
bool check_peak(int index, int column, std::vector<std::vector<int>> array){
if(array[index][column]>=array[index-1][column])
if(array[index][column]>=array[index+1][column])
if(array[index][column]>=array[index][column-1])
if(array[index][column]>=array[index][column+1])
return true;
else false;
}
int global_max_with_peak(std::vector<std::vector<int>> array, int column){
int max=array[0][column];
int index=0;
for(int i=1; i<array.size(); i++){
if(array[1][column]>array[i][column]){
max=array[i][column];
index=i;
}
}
bool res=check_peak(index,column,array);
if(res==true){
std::cout<<"Peak found! ";
std::cout<<array[index][column];
exit(0);
}
return index;
}
int peak_finder(std::vector<std::vector<int>> array, int beg, int end){
int middle = array[0].size()/2;
int column_max=global_max_with_peak(array, middle);
// i have only had 2 constraints for now... don't know why it wont work
if(array[column_max][middle]<=array[column_max][middle-1]){
peak_finder(array, beg, middle-1);
}
if(array[column_max][middle]<=array[column_max][middle+1]){
peak_finder(array, middle+1, end);
}
return 0;
}
int main(){
int array_rows, array_columns;
std::cout<<" Enter the length of array(rows) :: ";
std::cin>>array_rows;
std::cout<<" Enter the width of array(columns) :: ";
std::cin>>array_columns;
std::cout<<" Enter the values :: ";
std::vector<std::vector<int>> array(array_rows,std::vector<int>(array_columns));;
for(unsigned short i= 0; i<array_rows; i++){
for(unsigned short j= 0; j<array_columns; j++){
std::cin>>array[i][j];
}
}
int beg=0;
int end=array[0].size();
peak_finder(array,beg,end);
return 0;
}
我为不好的代码感到非常抱歉,任何帮助都是对的
没有编译错误,如果有逻辑错误,请注意else false;
函数中的check_peak()
语句。
我认为check_peak
最好这样写